Тепер вийшов 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 = "";