Binder
Більшість існуючих JavaScript транспіляторів (інструменти, які перетворюють код, написаний на одній версії JS, в код, сумісний з іншою або попередньою версією) простіші за TypeScript, оскільки вони надають обмежені можливості аналізу коду. Типові транспілятори JavaScript мають лише такий потік роботи:
Хоча наведена вище архітектура вірна як спрощене розуміння генерації TypeScript, ключовою особливістю є його семантична система. binder
(у binder.ts
) використовується для з’єднання різних частин вихідного коду в узгоджену систему типів, яку згодом використовує checker
(який ці типи і перевіряє). Основна відповідальність байндера полягає у створенні Symbols.
Символи (Symbol)
Символи з'єднують вузли декларацій в AST з іншими деклараціями, що вносять внесок у саму сутність. Символи є основними будівельними блоками семантичної системи. Конструктор символа визначений у файлі core.ts
. В свою чергу binder
використовує objectAllocator.getSymbolConstructor
, щоб отримати доступ до конструктора. Нижче наведений Symbol конструктор:
SymbolFlags
є перерахуванням (enum) прапорців і фактично використовується для ідентифікацій додаткових класифікацій символів (наприклад, прапорців області видимості змінної, таких як FunctionScopedVariable
або BlockScopedVariable
).
Usage by Checker
Внутрішньо binder
використовується типом checker
, який в свою чергу використовується program
. Спрощений стек викликів виглядає так:
Одиницею роботи для binder
є SourceFile
. binder.ts
керується checker.ts
.
Last updated