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),每個功能都有一個通用參數。例如:
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,然後我們添加currying,在你之前知道我們已經欺騙了所有人使用OCaml,並且全世界都是正確的:p –
非常有趣的方法,謝謝。 – kraftwer1
Try:f(1,「x」); –
[TypeScript泛型:參數類型推斷]的可能重複(https://stackoverflow.com/questions/38687965/typescript-generics-argument-type-inference) –