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が他の型を推論できるようにするにはどうすればよいですか?最初の型引数のみを指定する
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が他の型を推論できるようにするにはどうすればよいですか?最初の型引数のみを指定する
TypeScriptは型パラメータの部分的な推論を提供しません。型パラメータはすべて明示的に定義するか、コンパイラに処理させます。
ただし、型引数のデフォルト値を設定することができます:@ジョー・クレイ氏
function f<T, U = any>(foo: T, bar: U) {
}
f<number>(1, "x");
として、あなたはジェネリックをオプションにするには、デフォルトのパラメータを設定することができますが、コンパイラは、あなたが望むようにnot infer themます。
私が使用した回避策は、機能を複数のものに(curryingを介して)分割し、それぞれに1つの汎用パラメータを使用することです。たとえば、次のように
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]
お役に立てば幸いです。がんばろう。
まずJavaScriptに型を追加してから、カリングを追加します私たちがOCamlを使ってみんなをだましてしまったことを知ってください。そして、すべては世界で正しいです:p –
非常に面白いアプローチ、ありがとうございます。 – kraftwer1
試してください:f(1、 "x"); –
[TypeScriptジェネリック:引数型推論]の可能な複製(https://stackoverflow.com/questions/38687965/typescript-generics-argument-type-inference) –