簡體   English   中英

多個通用參數類型推斷不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM