Теперь появился TypeScript, для меня это захватывающая новость, но как мне преобразовать все существующие файлы JavaScript в TypeScript?
Теперь появился TypeScript, для меня это захватывающая новость, но как мне преобразовать все существующие файлы JavaScript в TypeScript?
Ответы:
Боюсь, это будет очень проблематично. TypeScript - это надмножество JavaScript . Это означает, что весь допустимый код JavaScript также является допустимым кодом TypeScript. Что совершенно неправильно. Следующий код верен в JavaScript, но создает ошибку в TypeScript:
var data={x:5, y:6};
data.z=5;
Вы можете получить динамическое поведение JavaScript, объявив данные как "окружающие"
var data:any={x:5, y:6};
data.z=5;
Теперь это будет работать и в TypeScript. Тем не менее вы можете изменить расширение файла .js на .ts и передать этот файл компилятору TypeScript. Это меня действительно смутило, и я задал вопрос в IRC-канале TypeScript на freenode. Оказалось, что компилятор Typescript проверяет свой ввод на корректный JavaScript и просто ничего не делает, если что-то находит. Интуитивно это звучит хорошо. Вы должны иметь возможность «преобразовать» весь свой JavaScript в Typescript, просто обновив расширения файлов, и все готово. К сожалению, это не работает должным образом. Предположим, у вас есть этот код:
var func=function(n){alert(n)};
var data={x:5};
data.z=6;
Изменить: я только что попытался скомпилировать это, и это не сработало. Извините, похоже, я ошибся: компилятор TypeScript даже не принимает чистый JavaScript. Постараюсь выяснить, что пошло не так.
Вы изменили расширение файла на .ts и используете функцию func в другом коде. Сначала все вроде нормально, но потом обнаруживается некрасивая ошибка. Вы решаете, что проверка статического типа, вероятно, вам поможет, и меняете код на:
var func=function(n:string){alert(n)};
var data={x:5};
data.z=6;
Но теперь это уже недействительный код JavaScript, и компилятор будет генерировать множество сообщений об ошибках. Ведь у данных нет члена «z». ... Этого поведения можно было бы избежать, если бы тип по умолчанию всегда был бы "любой", но тогда вывод типа был бы совершенно бесполезен.
Так как же решить эту проблему? Ответ: файлы декларации. Вы можете использовать свой код JavaScript «как есть» в проекте и при этом получать статическую проверку типа с помощью нескольких файлов .d.ts. Они сообщают компилятору, какие переменные, методы и «классы» объявлены в файле JavaScript, включая их типы. Поэтому они позволяют проверять типы во время компиляции и использовать фантастический интеллект. Файл .d.ts для моего примера будет
declare var data:any;
declare function func(n:string);
Сохраните его как «myjsfile.d.ts» и импортируйте его в машинописный текст с помощью
///<reference path="myjsfile.d.ts"/>
обязательно включите скрипт JavaScript в свой html-файл над скомпилированным машинописным текстом. Вот интересная ссылка . Возможно, вас заинтересует раздел «Превращение JavaScript в TypeScript».
noEmitOnErrorон выключен, он все еще может работать и передавать свою транспиляцию. Таким образом, хотя он показывает ошибки (что беспокоит), вы можете фактически игнорировать эти ошибки и использовать транспиляцию TypeScript, несмотря на это (позволяя, например, постепенный переход от JS к TS). Кроме того, по крайней мере, некоторые ошибки можно отключить с помощью переключателей вроде noImplicitAny(возможно, все, хотя и IDK).
Обновление: инструмент подробно описан в этом посте
ReSharper, начиная с версии 9 ( доступны сборки EAP ), имеет функцию автоматического преобразования кода JavaScript в TypeScript. Вы можете начать с переименования файла .js в .ts и увидеть такие предложения R #:

Не пробовал на реальных примерах. Но он способен преобразовывать большое количество шаблонов JavaScript.
Из терминала (mac):
for f in *.js; do mv $f `basename $f .js`.ts; done;
Переименовывает все файлы .js в .ts
Это несколько иронично, но, как указывает Бенджамин выше, файлы JavaScript являются допустимыми TypeScript . Если вы хотите добавить типы, классы, интерфейсы и т. Д. В свой JavaScript - вам придется самостоятельно спроектировать и изменить свой код, используя эти концепции - для этого мало / нет автоматического преобразования.
С GNU findutils (большинство * nixes) + Bash просто выполните:
find -type f -name '*.js' -exec bash -c 'mv "${1}" "${1%???}.ts"' bash {} \;
var a = 5; a = "";