【发布时间】:2022-01-26 12:33:13
【问题描述】:
我想在运行时内省一个函数并生成一个类似于 VS Code 中悬停功能的 ReturnType 字符串。我知道 VS Code 只是在后台运行一个打字稿服务器,所以理论上这应该是可能的。
import * as ts from "typescript"
我已经能够导入 typescript 并抓取 AST 以获取函数声明的确切节点(尽管我希望这对箭头和常规函数都有效)。
示例
const foo = () => ({ bar: "baz" }); // function.ts
getReturnType("function.ts","foo") // returns "{bar:string}"
许多值得注意的警告之一是该函数可能会调用在不同文件中声明的其他函数,理想情况下,类型字符串应该将所有内容解析为原语,即,
type complex = {
users: User[]
}
// what I want
type primitive = {
users: { name: string; role: string }[]
}
VS 代码示例
【问题讨论】:
-
即使 vscode 也无法将其解析为原语。不过,这个扩展做了类似的事情:github.com/d-kimuson/ts-type-expand 你可以查看它的源代码。但正如目前所说,这个问题对于 stackoverflow 来说非常广泛。
标签: typescript code-generation abstract-syntax-tree