如何从 TypeScript 编译器 API 分析 Type 对象?

问题描述 投票:0回答:2

注意:这个问题是关于 TypeScript 编译器 API不是关于 TypeScript 作为一种语言!


我有一个类型为

ts.Type
的值。我想知道它代表什么类型:它是数字吗?一个函数?数组?

我发现

type.flags
允许我大致执行
typeof
运算符的静态等效操作,使我能够区分基本类型,例如
number
string
boolean
(但不是函数)。其他任何东西——数组、函数、POJO 等等——都只有
TypeFlags.Object
标志。

如何进一步检查这些非原始类型?如何确定类型是否是数组、函数、枚举、类实例...?

typescript abstract-syntax-tree typescript-compiler-api
2个回答
0
投票

还有一个关于具有

Typeflags.Object
的类型的字段。 它的名字叫
type.objectFlags
,你可以用它来进一步区分类型


0
投票

首先我想说去玩一下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);
© www.soinside.com 2019 - 2024. All rights reserved.