Компилятор Typescript, предоставляющий «псевдонимы типов», может использоваться только в файле .ts». в файле js

#javascript #reactjs #typescript

#javascript #reactjs #typescript

Вопрос:

Недавно я перенес проект react js в react js с помощью typescript. Как вы знаете, typescript принимает файлы js, поэтому я перенес весь код в приложение typescript react. Также я добавил типы для каждой библиотеки, которая мне была нужна.

У меня есть этот файл с именем HeatLayer.js который является модифицированной версией react-leaflet-heatmap, созданной OpenGov.

Когда я запускаю npm в проекте react typescript, я получаю эту ошибку

 'type aliases' can only be used in a .ts file.  TS8008

11 | import PropTypes from 'prop-types';
12 | 
13 | export type LngLat = {
   |             ^
14 |   lng: number;
15 |   lat: number;
16 | }
  

Когда я запускаю npm в приложении react js, все работает так, как ожидалось.
Это HeatLayer.js файл:

https://github.com/OpenGov/react-leaflet-heatmap-layer/blob/master/src/HeatmapLayer.js

РЕШЕНИЕ:

Оказывается Heatmalayer.js был создан с помощью javascript flow, и компилятор typescript не может обработать flow. Поэтому я удалил все типы и использовал его как чистый файл javascript. Лучшим решением было бы преобразовать его в typescript, добавив синтаксис и типы typescript.

Комментарии:

1. Этот файл синтаксически корректен как для TypeScript, так и для TypeScript, с примерно эквивалентной семантикой. Поскольку вы используете TypeScript, просто измените расширение на .ts и все будет готово.

2. Я изменил расширение на ts, но выдает ошибку, которую я только что опубликовал в вопросе в конце

3. Вы должны использовать radius?: number

4. смотрите последнее редактирование, оно все еще не работает

Ответ №1:

Вы пытаетесь использовать типы в файле javascript. Ошибка верна, вы должны создать файл typescript. Измените его на .ts . Typescript допускает файлы javascript, но файлы javascript не допускают типы. Вы можете скрывать файлы один за другим, если вы того пожелаете. Просто убедитесь, что вы скомпилировали эти файлы (обычно через tsc )


Для вашего редактирования у вас есть несколько проблем:

 updateHeatmapRadius(radius: number, blur: ?number): void {
  

Поскольку ошибка указывает на вопросительный знак ?number , это недопустимый тип. Если вы пытаетесь показать необязательный, вы можете сделать это как

 updateHeatmapRadius(radius: number, blur?: number): void {
  

Теперь для вашей следующей проблемы вы пытаетесь импортировать файл javascript, у которого нет типов. Это будет одна из самых неприятных вещей при преобразовании в typescript. Большинство популярных библиотек имеют файлы типов. Вам нужно будет создать .d.ts файл, чтобы сказать, что эта вещь может быть чем угодно. Предпочтительно, чтобы вы действительно вводили файл, чтобы получить все преимущества Typescript. Или вы можете сделать это по ходу работы. Но если у вас нет на это времени… Обычно у меня есть папка с именем declarations , тогда вы можете поместить туда

simpleheat.d.ts

 declare module 'simpleheat' {
  // typing module default export as `any` will allow you to access its members without compiler warning
  const simpleheat: any;
  export default simpleheat;
}
  

На самом деле, вероятно, лучше объявить это как unknown — но вы можете прочитать о различиях. any это поможет вам быстрее всего начать работу.

Комментарии:

1. Я изменил расширение на ts, но выдает ошибку, которую я только что опубликовал в вопросе в конце

2. Я попробовал ваш ответ, но он не работает, не могли бы вы попытаться мне помочь, я застрял:(

3. Отредактировано для вас. Возможно, вам придется еще немного почитать о typescript и выполнить несколько простых примеров, прежде чем пытаться преобразовать этот файл заново.

4. Хорошо, большое вам спасибо. Еще один вопрос, как возможно, что когда это был файл .js в моем приложении react с использованием javascript для проекта, он работал, и когда я переместил весь код в приложение ts react, он выдавал мне ошибки?

5. Похоже, что каждая ошибка, о которой я упоминал, была вызвана typescript. Импорт файла без определения, добавление вопросительного знака в неправильном месте для необязательного, добавление типа в файл JavaScript. В общем, Typescript вводит больше ограничений и ошибок, когда JavaScript допускает продолжение выполнения ошибки. В разработке я настоятельно предпочитаю более строгие проверки.