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];
}