TypeScript Add typeChecker API to get the inferred type arguments of call expression

nfs0ujit  于 4个月前  发布在  TypeScript
关注(0)|答案(2)|浏览(46)

🔍 搜索词

infer type arguments function call expression

✅ 可可行性检查清单

⭐ 建议

interface TypeChecker {
  getTypeArgumentsOfSignature(signature: Signature): readonly Type[];
}

📃 激励示例

对于下面的代码,建议的API应该为 [ "text" ] 节点返回 Passthrough("text")

function Passthrough<T>(value: T) {
  return value;
}

let str = Passthrough("text");

💻 用例

在我自己的情况下,我正在编写一个 TypeScript to C++ compiler,并且获取推断出的类型参数对于将泛型函数调用翻译成C++至关重要。
还有一些其他开源项目通过hack TypeScript的内部信息来获取这些信息:
https://github.com/GoogleFeud/ts-macros/blob/e65480a7bc54107e935e9a95ecbb4f3825f2d6e2/src/utils.ts#L259-L270
https://github.com/mxsdev/ts-type-explorer/blob/3b0bb21f574ebb0d70aac84c37e81e1df0b1d9e4/packages/api/src/util.ts#L725-L750
https://github.com/johnW-ret/express-openapi-gen/blob/885e498066f51fccaa00615f0b46b070788477c9/src/index.ts#L45C18-L84

hzbexzde

hzbexzde1#

我们内部没有这个功能(我知道这很奇怪,因为我们总是操作和组合TypeMapper对象,而不是具体的类型参数),但我认为对于检查器来说,实现只是

function getTypeArgumentsForResolvedSignature(signature: Signature) {
    return instantiateTypes((signature.target || signature).typeParameters, signature.mapper);
}

(只要你接受一个未解析的签名返回其输入类型参数列表)。你不能公开实现它,因为.target.mapperinstantiateTypes都是内部的,但似乎想要了解一个已解析的签名是很合理的。

laik7k3q

laik7k3q2#

批准暴露上述功能

相关问题