注意:这个问题是关于 TypeScript 编译器 API,不是关于 TypeScript 作为一种语言!
我有一个类型为
ts.Type
的值。我想知道它代表什么类型:它是数字吗?一个函数?数组?
我发现
type.flags
允许我大致执行 typeof
运算符的静态等效操作,使我能够区分基本类型,例如 number
、string
和 boolean
(但不是函数)。其他任何东西——数组、函数、POJO 等等——都只有 TypeFlags.Object
标志。
如何进一步检查这些非原始类型?如何确定类型是否是数组、函数、枚举、类实例...?
还有一个关于具有
Typeflags.Object
的类型的字段。
它的名字叫type.objectFlags
,你可以用它来进一步区分类型
首先我想说去玩一下https://typescript-eslint.io/play/。放入一些代码,选择 TypeScript 选项卡,然后单击周围。当您在树中选择注释时,它会显示
kind
和 flags
属性的解码值。
它比我开始使用的解码标志的助手要好得多:
function activeFlags(flagEnum: any, flagValue: number) {
return Object.entries(flagEnum)
.filter(([, value]) => typeof value === 'number' && (flagValue & value) !== 0)
.map(([key]) => key);
}
activeFlags(ts.NodeFlags, tsNode.flags);