簡體   English   中英

打字稿泛型返回類型

[英]Typescript generics return type

我是打字稿的新手,我正試圖圍繞泛型的工作原理進行思考。 我想知道為什么下面的代碼不飛:

function identity<T>(arg: T): T {
    let num: number = 2;
    return num;
}

let output = identity<number>(1);

我收到錯誤消息:“數字”類型不可分配給“T”類型。 如果函數的輸入是數字,這是否意味着 number 的返回類型也應該起作用,因為我們說 T 是數字類型?

你必須像對待現有的任何類型一樣對待T 你的函數負責人說:我想要一個 T 類型的參數並返回 T 類型的東西。

但是,您的代碼始終返回一個number ,該number不必是T 在您的示例中調用它,但您可以使用identity<string>("test")調用它並期望返回一個字符串,但它仍然是一個number 沖突由此而來。

讓我們看看你的身份函數的類型簽名。

function identity<T>(arg: T)

我們在這里說的是這個函數接受一個T類型的參數(我們沒有提前指定,它可以是任何東西),並且它返回一個T類型的值。

鑒於沒有關於T任何信息,唯一可以返回這種類型值的函數是重用提供的參數。 換句話說,恆等函數只有一種且只有一種可能的實現——返回其參數的實現。

function identity<T>(arg: T) { return arg }

錯誤消息准確地告訴您: Type 'number' is not assignable to type 'T' ,這是正確的,因為T是通用的 :)

短篇小說,你應該像這樣更正你的功能:

function identity<T>(arg: T): T {
    let num: T = arg;
    return num;
}

let output = identity<number>(1)


console.log(output);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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