[英]Multiple generic parameter type inference not working
export class OneParam {
static bar<P1>(q:any, params: { p1: P1 }) {}
}
OneParam.bar('foo', { p1: 12 });
在上面的代碼塊中,正確推斷了P1
,不需要顯式傳遞P1
,如下所示:
export class TwoParams {
static bar<T, P1>(q:T ,params: { p1: P1 }) {}
}
TwoParams.bar<string>('foo', { p1: 12 });
不推斷第二個參數。 這是打字稿推斷的錯誤還是僅僅是誤解?
這是故意發生的,您可以在此處閱讀:
https://www.typescriptlang.org/docs/handbook/generics.html
我提取了有趣的部分:
[...]
一旦編寫了通用標識函數,就可以用以下兩種方法之一來調用它。 第一種方法是將所有參數(包括類型參數)傳遞給函數:
let output = identity<string>("myString"); // type of output will be 'string'
在這里,我們明確地將T設置為字符串作為函數調用的參數之一,在參數而不是()周圍使用<>表示。
第二種方法也許也是最常見的。 在這里,我們使用類型參數推論-也就是說,我們希望編譯器根據傳入的參數類型為我們自動設置T的值:
let output = identity("myString"); // type of output will be 'string'
注意,我們不必在尖括號(<>)中顯式傳遞類型; 編譯器僅查看值“ myString”,並將T設置為其類型。
盡管類型實參推斷是使代碼更短,更易讀的有用工具,但是當編譯器無法推斷類型時,您可能需要像上一示例中那樣顯式傳遞類型實參, 這可能在更復雜的示例中發生。
[...]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.