ts.SyntaxKind.VariableStatement和ts.SyntaxKind.FirstStatement之间有什么区别?

时间:2019-12-24 04:15:01

标签: typescript

它们都具有相同的枚举值,例如从TypeScript 3.7.2:

VariableStatement = 224,
FirstStatement = 224,

为什么同一个语法类型有两个名称?

1 个答案:

答案 0 :(得分:4)

SyntaxKind枚举中,有一些条目不是用来表示具体的语法类型,而是表示它们的 class 。对于语句,其定义如下:

enum SyntaxKind {
    // snip
    FirstStatement = VariableStatement,
    LastStatement = DebuggerStatement,
    // snip
}

然后,要检查某种语法类型是否为“语句”类型之一,可以简单地编写kind >= SyntaxKind.FirstStatement && kind <= SyntaxKind.LastStatement。而且,如果语句种类集将发生更改,则仅应更改FirstStatementLastStatement的定义,而不能更改这些“范围检查”。