function f<T, U>(foo: T, bar: U) {
}
f(1, "x"); // OK, inferes <number, string>
f<number>(1, "x"); // ERROR: Expected 2 type arguments, but got 1.
如何只传递第一个类型的参数,让TypeScript推断另一个?
答案 0 :(得分:4)
正如@ Joe-Clay所说,您可以设置默认参数以使泛型可选,但编译器将not infer them以您想要的方式。
我使用的解决方法是将功能分成多个(通过currying),每个功能都有一个通用参数。例如:
function f<T,U>(foo:T, bar: U): [T, U] {
return [foo, bar];
}
变为
function curriedF<T>(foo: T) {
return function <U>(bar: U): [T, U] {
return [foo, bar]
}
}
允许这样:
var z = curriedF(1)("x"); // [number, string]
var z = curriedF<number>(1)("x"); // also [number, string]
希望有所帮助;祝你好运。
部分推理取得了一些进展(使用*
标记来标记&#34;请为我推断这个&#34;)它可能出现在TypeScript 3.2或其附近。有关详细信息,请参阅this pull request。
答案 1 :(得分:3)
TypeScript不提供类型参数的部分推理 - 要么全部显式定义它们,要么让编译器处理它。
但是,您可以为类型参数设置默认值:
function f<T, U = any>(foo: T, bar: U) {
}
f<number>(1, "x");