假設我有一個通用的元組型別:
type MyTuple<A, B> = [A, B]
以下作業,因為我給它泛型型別:
const thing2: MyTuple<number, string> = [20, 'hello']
我想這樣使用它,但它給出了一個錯誤:
const thing1: MyTuple = [20, 'hello'] // -> Generic type 'MyTuple' requires 2 type argument(s).
我不明白為什么在這種情況下它需要泛型 args - 例如,我在使用時很少需要指定泛型型別map。
代碼在這里。
uj5u.com熱心網友回復:
編譯器不會推斷出泛型型別的型別引數。MyTuple<A, B>
在microsoft/TypeScript#30120中提出了此功能的請求,該請求作為microsoft/TypeScript#26242中長期開放功能請求的副本而被關閉。也許在將來的某個 TypeScript 版本中你可以撰寫const thing1: MyTuple<infer, infer> = [20, 'hello']它,它會按照你的意愿作業。但目前(TS4.7 及以下)這是不可能的。
另一方面,泛型函式的型別引數確實會在您呼叫它們時由編譯器推斷(例如map(),陣列上的方法)。這意味著您可以通過創建通用輔助標識函式來解決您的問題:
type MyTuple<A, B> = [A, B]
const myTuple = <A, B>(t: MyTuple<A, B>) => t;
而不是寫const x: MyTuple<XXX,YYY> = y,你寫const x = myTuple(y):
const thing1 = myTuple([20, 'hello']);
// const thing1: MyTuple<number, string>
現在thing1已被推斷為MyTuple<number, string>所需的型別。擁有這種無操作功能可能不是最佳選擇,但它是我們目前能得到的最接近您想要的功能。
Playground 代碼鏈接
uj5u.com熱心網友回復:
您定義了一個沒有默認值的泛型型別。
MyTuple沒有它的 2 個通用引數就沒有意義。
type MyTuple<A = number, B = string> = [A, B]
const thing1: MyTuple = [20, 'hello']
例如,此示例有效,但它可能不是您要尋找的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/480200.html
上一篇:mypy:如何在泛型類中宣告回傳self的方法的回傳型別?
下一篇:嵌套泛型impl
