Jas*_*hrt 5 typescript tsc typescript-compiler-api
我正在使用 ts-morph,它又使用 TS Compiler API。
我有这样的代码:
export type Foo = string
export const foo: Foo = 'bar'
Run Code Online (Sandbox Code Playgroud)
当我查找导出的类型时,foo我得到了string. 但我真正想要的是类型别名声明类型。
导出的 Node 类型foo是 VariableDeclaration。从那里我弄清楚了如何到达TypeReferenceNode。从那里我有一个方法来获取引用的名称。在这种情况下"Foo"。但我现在不知道如何从这个名称转到类型别名声明。假设我们不知道类型别名的位置"Foo"。如何动态查找呢?
在这种特定情况下这是不可能的。出于性能原因,TypeScript 编译器会保留某些类型。
出于性能原因,我们尽可能实习类型(这样我们就可以避免对等效类型进行重复工作)。我们目前不实习匿名对象类型,尽管我们之前已经尝试过。不幸的是,驻留对象类型具有破坏驻留类型上的定义的副作用;所以我们没有把它拉进来。今天我们实习的具体类型是索引访问、并集和交集(也是反向映射类型,但只有推理才能产生这些)。这是一个权衡——驻留类型的原始信息会丢失;但大多数时候我们确实避免了很多工作。-来源
所以在这里,Foo被拘留是string因为它们是同等的。我在 TypeScript 存储库中询问出于分析原因禁用此行为是否可行,但尚未得到答复。
要使其发挥作用,您可以采取的一个技巧是更改代码以使用品牌而不是仅使用string。
export type Foo = string & { __FooBrand?: undefined };
export const foo: Foo = 'bar';
Run Code Online (Sandbox Code Playgroud)
附加链接:
| 归档时间: |
|
| 查看次数: |
1116 次 |
| 最近记录: |