是否有一个API方法可以从TypeScript编译器中获取“bottomed out”类型信息?示例:
interface User {
id: number
name: string
}
type NameOnly = Pick<User, 'name'>
type NameOnlyAliased = NameOnly
字符串
在VSCode中,如果我将鼠标悬停在NameOnlyAliased
上,它会显示:
type NameOnlyAliased = {
name: string;
}
型
我的问题是,编译器API中是否有一个函数(或其他简单的方法,而不应用别名,Pick
等的语义)来获取上面=
右侧的信息,最好是作为数据(而不仅仅是字符串),比如:
{
NameAliasedOnly: {
properties: {
name: {
type: 'string'
}
}
}
}
型
用例是生成代码以从类型定义创建fast-check
仲裁器(如果已经存在,那就太棒了)。我已经尝试过使用ts-json-schema-generator
来实现这一目的,但有一些类型定义它无法处理。
2条答案
按热度按时间zsbz8rwp1#
我找到了一个解决方案。它不直接使用TypeScript编译器API,而是使用优秀的ts-morph library,一个编译器API的 Package 器,它简化了许多任务。这里有一些示例代码,其中
test.ts
文件包含我上面问题中的示例代码。字符串
执行此脚本会根据需要输出
[ [ 'name', 'string' ] ]
。对于更复杂的类型,您可以导航到类型层次结构。dtcbnfnu2#
我根据@sparkofreason的答案创建了一个CLI工具ts-simplify。它是一个编译器,输出简化的基本类型。例如:
字符串
这将输出一个具有所需输出的文件:
型