typescript
GitHub
  • README
  • Давайте Почнемо
    • Why TypeScript
  • JavaScript
    • Equality
    • References
    • Null vs. Undefined
    • this
    • Closure
    • Number
    • Truthy
  • Future JavaScript Now
    • Classes
      • Classes Emit
    • Arrow Functions
    • Rest Parameters
    • let
    • const
    • Destructuring
    • Spread Operator
    • for...of
    • Iterators
    • Template Strings
    • Promise
    • Generators
    • Async Await
  • Проект / Project
    • Контекст компіляції / Compilation Context
      • tsconfig.json
      • Які файли / Which Files?
    • Простори Оголошень / Declaration Spaces
    • Модулі / Modules
      • File Module Details
      • global.d.ts
    • Namespaces
    • Dynamic Import Expressions
  • Node.js QuickStart
  • Browser QuickStart
  • Library QuickStart
  • TypeScript's Type System
    • JS Migration Guide
    • @types
    • Ambient Declarations
      • Declaration Files
      • Variables
    • Interfaces
    • Enums
    • lib.d.ts
    • Functions
    • Callable
    • Type Assertion
    • Freshness
    • Type Guard
    • Literal Types
    • Readonly
    • Generics
    • Type Inference
    • Type Compatibility
    • Never Type
    • Discriminated Unions
    • Index Signatures
    • Moving Types
    • Exception Handling
    • Mixins
  • JSX
    • React
    • Non React JSX
  • Options
    • noImplicitAny
    • strictNullChecks
  • Errors in TypeScript
    • Interpreting Errors
    • Common Errors
  • NPM
  • Testing
    • Jest
    • Cypress
  • Tools
    • Prettier
    • Husky
    • ESLint
    • Changelog
  • TIPs
    • String Based Enums
    • Nominal Typing
    • Stateful Functions
    • Currying
    • Type Instantiation
    • Lazy Object Literal Initialization
    • Classes are Useful
    • Avoid Export Default
    • Limit Property Setters
    • outFile caution
    • JQuery tips
    • static constructors
    • singleton pattern
    • Function parameters
    • Build Toggles
    • Barrel
    • Create Arrays
    • Typesafe Event Emitter
  • StyleGuide
  • TypeScript Compiler Internals
    • Program
    • AST
      • TIP: Visit Children
      • TIP: SyntaxKind enum
      • Trivia
    • Scanner
    • Parser
      • Parser Functions
    • Binder
      • Binder Functions
      • Binder Declarations
      • Binder Container
      • Binder SymbolTable
      • Binder Error Reporting
    • Checker
      • Checker Diagnostics
      • Checker Error Reporting
    • Emitter
      • Emitter Functions
      • Emitter SourceMaps
    • Contributing
Powered by GitBook
On this page
  • Suppressing Errors
  • Third Party JavaScript
Edit on GitHub
  1. TypeScript's Type System

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, наприклад:

var foo = 123;
var bar = 'hey';

bar = foo; // ERROR: не може призначити number в string

Незважаючи на те, що error is valid (і в більшості випадків отримана інформація буде кращою, ніж те, що уявляли оригінальні автори різних частин бази коду), ви, ймовірно, зосередитеся на написанні нового коду на TypeScript, поступово оновлюючи стару кодову базу. Тут ви можете придушити цю помилку за допомогою твердження типу, як показано нижче:

var foo = 123;
var bar = 'hey';

bar = foo as any; // Okay!

В інших місцях ви можете позначити щось як any, наприклад:

function foo() {
    return 1;
}
var bar = 'hey';
bar = foo(); // ERROR: не може призначити number в string

Suppressed:

function foo(): any { // Added `any`
    return 1;
}
var bar = 'hey';
bar = foo(); // Okay!

Примітка: придушення помилок небезпечно, але це дозволяє вам помічати помилки у вашому new коді TypeScript. Ви можете залишати коментарі // TODO: під час роботи.**

Third Party JavaScript

Ви можете змінити свій JavaScript на TypeScript, але ви не можете змінити весь світ на використання TypeScript. Ось тут і з’являється підтримка навколишнього визначення TypeScript. На початку ми рекомендуємо вам створити vendor.d.ts (розширення .d.ts вказує на те, що це declaration file) і почати додавати брудні речі до нього. Крім того, можна створити спеціальний файл для бібліотеки, наприклад. jquery.d.ts для jquery.

Розглянемо випадок jquery, ви можете легко створити trivial визначення для нього:

declare var $: any;

Іноді ви можете додати явну анотацію до чогось (наприклад, JQuery), і вам потрібно щось у type declaration space. Ви можете зробити це досить легко, використовуючи ключове слово type:

declare type JQuery = any;
declare var $: JQuery;

Це спрощує шлях оновлення в майбутньому.

Third Party NPM modules

declare module "jquery";

А потім ви можете імпортувати його у свій файл за потреби:

import * as $ from "jquery";

External non js resources

declare module "*.css";

Тепер люди можуть імпортувати * як foo з "./some/file.css";

Так само, якщо ви використовуєте шаблони html (наприклад, angular), ви можете:

declare module "*.html";

More

PreviousTypeScript's Type SystemNext@types

Last updated 1 year ago

Примітка: добре підтримувані та чітко типізовані визначення для майже 90% найпопулярніших бібліотек JavaScript існують у репозиторії OSS під назвою. Ми рекомендуємо переглянути там, перш ніж створювати власні визначення, як ми наводимо тут. Тим не менш, цей швидкий і брудний спосіб є життєво важливим знанням, щоб зменшити початкове тертя з TypeScript**.

Знову ж таки, високоякісний jquery.d.ts існує на . Але тепер ви знаєте, як швидко подолати будь-яке протиріччя JavaScript -> TypeScript під час використання стороннього JavaScript. Далі ми детально розглянемо декларації середовища.

Подібно до оголошення глобальної змінної, ви можете легко оголосити глобальний модуль. наприклад для jquery, якщо ви хочете використовувати його як модуль (), ви можете написати наступне самостійно:

Знову ж таки, високоякісний jquery.d.ts існує на , який забезпечує набагато вищу якість оголошення модуля jquery. Але він може не існувати для вашої бібліотеки, тож тепер у вас є швидкий спосіб продовжити міграцію з низьким рівнем тертя 🌹

Ви навіть можете дозволити імпорт будь-якого файлу, напр. Файли .css (якщо ви використовуєте щось на кшталт завантажувачів стилю webpack або модулів css) із простою декларацією стилю * (ідеально у файлі):

Якщо ви хочете приховати своє оновлення, оскільки ви не змогли залучити команду для переходу на TypeScript, .

DefinitelyTyped
DefinitelyTyped
https://www.npmjs.com/package/jquery
DefinitelyTyped
global.d.ts file
TypeScript has a blog post on upgrading silently without having to convince your team up front