🔍 搜索词
infer type arguments function call expression
✅ 可可行性检查清单
- 这不会对现有的TypeScript/JavaScript代码造成破坏性的变化
- 这不会改变现有JavaScript代码的运行时行为
- 这可以在不根据表达式的类型发出不同的JS的情况下实现
- 这不是一个运行时特性(例如库功能、带有JavaScript输出的非ECMAScript语法、新的JavaScript语法糖等)
- 这不是要求添加一个新的实用类型: https://github.com/microsoft/TypeScript/wiki/No-New-Utility-Types
- 这个特性将与我们设计目标的其他部分一致: https://github.com/Microsoft/TypeScript/wiki/TypeScript-Design-Goals
⭐ 建议
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
2条答案
按热度按时间hzbexzde1#
我们内部没有这个功能(我知道这很奇怪,因为我们总是操作和组合
TypeMapper
对象,而不是具体的类型参数),但我认为对于检查器来说,实现只是(只要你接受一个未解析的签名返回其输入类型参数列表)。你不能公开实现它,因为
.target
、.mapper
和instantiateTypes
都是内部的,但似乎想要了解一个已解析的签名是很合理的。laik7k3q2#
批准暴露上述功能