JS Migration Guide
Припускаючи:
ви знаєте JavaScript.
ви знаєте шаблони та інструменти створення (наприклад, webpack), які використовуються в проекті.
Відкинувши це припущення, загалом процес складається з таких кроків:
Додайте
tsconfig.json
.Змініть розширення файлу вихідного коду з
.js
на.ts
. Почніть suppressing помилки за допомогоюany
.Напишіть новий код на TypeScript і якомога менше використовуйте
any
.Поверніться до старого коду та почніть додавати анотації типів і виправляйте виявлені помилки.
Використовуйте визначення навколишнього середовища для стороннього коду JavaScript.
Давайте обговоримо деякі з цих пунктів далі.
Зауважте, що весь JavaScript є valid TypeScript. Тобто якщо ви надасте компілятору TypeScript деякий JavaScript -> JavaScript, створений компілятором TypeScript, поводитиметься точно так само, як оригінальний JavaScript. Це означає, що зміна розширення з .js
на .ts
не вплине негативно на вашу кодову базу.
Suppressing Errors
TypeScript негайно почне перевірку типу вашого коду, і ваш вихідний код JavaScript може бути не таким охайним, як ви думали, і, отже, ви отримуєте діагностичні помилки. Багато з цих помилок можна придушити за допомогою any
, наприклад:
Незважаючи на те, що error is valid (і в більшості випадків отримана інформація буде кращою, ніж те, що уявляли оригінальні автори різних частин бази коду), ви, ймовірно, зосередитеся на написанні нового коду на TypeScript, поступово оновлюючи стару кодову базу. Тут ви можете придушити цю помилку за допомогою твердження типу, як показано нижче:
В інших місцях ви можете позначити щось як any
, наприклад:
Suppressed:
Примітка: придушення помилок небезпечно, але це дозволяє вам помічати помилки у вашому new коді TypeScript. Ви можете залишати коментарі
// TODO:
під час роботи.**
Third Party JavaScript
Ви можете змінити свій JavaScript на TypeScript, але ви не можете змінити весь світ на використання TypeScript. Ось тут і з’являється підтримка навколишнього визначення TypeScript. На початку ми рекомендуємо вам створити vendor.d.ts
(розширення .d.ts
вказує на те, що це declaration file) і почати додавати брудні речі до нього. Крім того, можна створити спеціальний файл для бібліотеки, наприклад. jquery.d.ts
для jquery.
Примітка: добре підтримувані та чітко типізовані визначення для майже 90% найпопулярніших бібліотек JavaScript існують у репозиторії OSS під назвоюDefinitelyTyped. Ми рекомендуємо переглянути там, перш ніж створювати власні визначення, як ми наводимо тут. Тим не менш, цей швидкий і брудний спосіб є життєво важливим знанням, щоб зменшити початкове тертя з TypeScript**.
Розглянемо випадок jquery
, ви можете легко створити trivial визначення для нього:
Іноді ви можете додати явну анотацію до чогось (наприклад, JQuery
), і вам потрібно щось у type declaration space. Ви можете зробити це досить легко, використовуючи ключове слово type
:
Це спрощує шлях оновлення в майбутньому.
Знову ж таки, високоякісний jquery.d.ts
існує на DefinitelyTyped. Але тепер ви знаєте, як швидко подолати будь-яке протиріччя JavaScript -> TypeScript під час використання стороннього JavaScript. Далі ми детально розглянемо декларації середовища.
Third Party NPM modules
Подібно до оголошення глобальної змінної, ви можете легко оголосити глобальний модуль. наприклад для jquery
, якщо ви хочете використовувати його як модуль (https://www.npmjs.com/package/jquery), ви можете написати наступне самостійно:
А потім ви можете імпортувати його у свій файл за потреби:
Знову ж таки, високоякісний
jquery.d.ts
існує на DefinitelyTyped, який забезпечує набагато вищу якість оголошення модуля jquery. Але він може не існувати для вашої бібліотеки, тож тепер у вас є швидкий спосіб продовжити міграцію з низьким рівнем тертя 🌹
External non js resources
Ви навіть можете дозволити імпорт будь-якого файлу, напр. Файли .css
(якщо ви використовуєте щось на кшталт завантажувачів стилю webpack або модулів css) із простою декларацією стилю *
(ідеально у файліglobal.d.ts
file):
Тепер люди можуть імпортувати * як foo з "./some/file.css";
Так само, якщо ви використовуєте шаблони html (наприклад, angular), ви можете:
More
Якщо ви хочете приховати своє оновлення, оскільки ви не змогли залучити команду для переходу на TypeScript, TypeScript has a blog post on upgrading silently without having to convince your team up front.
Last updated