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