TIP: SyntaxKind enum

SyntaxKind визначений як const enum, ось приклад :

export const enum SyntaxKind {
    Unknown,
    EndOfFileToken,
    SingleLineCommentTrivia,
    // ... LOTS more

Це const enum (концепція яку ми розглянули раніше). Вона використовується для того, щоб перелік вбудовувався безпосередньо у код, замість створення об'єкта переліку. Коли ми використовуємо const enum, значення переліку замінюється прямо в місці використання (наприклад, ts.SyntaxKind.EndOfFileToken буде замінено на фактичне значення 1 в усіх місцях, де використовується цей перелік).

Один з основних переваг використання const enum полягає в тому, що ми уникаємо витрат на дереференцію (dereferencing cost), тобто на доступ до об'єкта переліку під час роботи з AST. Оскільки значення вбудовуються безпосередньо в код, нам не потрібно звертатися до об'єкта переліку, що полегшує та прискорює роботу з AST.

Однак, компілятор компілюється з прапорцем --preserveConstEnums тому перелік все ще доступний під час виконання. Одже, в JavaScript ви можете використовувати ts.SyntaxKind.EndOfFileToken, якщо бажаєте. Крім того, ви можете перетворити ці елементи переліку у рядки для відображення за допомогою наступної функції:

export function syntaxKindToName(kind: ts.SyntaxKind) {
    return (<any>ts).SyntaxKind[kind];
}

Last updated