我是否可以在兩種型別上定義一個泛型函式,其中一種具有默認值,如果我指定第一種型別,則可以從函式的使用中推斷出默認值?
例子:
const f = <T, N extends number = number>(num: N, val: T): [N, T] => [num, val];
const e1 = f(1, "a"); // e1: [1, string] <- as expected
const e2 = f<string>(1, "b"); // e2: [number, string] <- actual
// e2: [1, string] <- desired
uj5u.com熱心網友回復:
目前不可能。
從 Typescript 4.6.2 起,您不能部分推斷泛型引數。這意味著要么都是從使用中推斷出來的,要么都是顯式的。
請參閱此 github 問題:https ://github.com/microsoft/TypeScript/issues/10571
這種情況完全可以推斷:
const e1 = f(1, "a");
這個案例是完全明確的:
const e2 = f<string>(1, "b");
即使您只提供一個引數,這也會將泛型置于顯式模式,并搜索該引數的其他顯式來源。它在默認型別中找到一個N,所以它使用它。
這里的典型作業是嵌套函式,它可能比你想要的更丑:
const fComposed = <N extends number = number>(num: N) => {
return <T>(val: T): [N, T] => {
return [num, val]
}
}
const e3 = fComposed(123)('test') // [123, string]
const e4 = fComposed(123)<string>('test') // [123, string]
操場
話雖如此,這個例子很做作,所以我不知道你的實際用例。但是可能有更好的方法完全取決于您的目標。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/439036.html
上一篇:如何更新Mongoose(Momgodb)中嵌套物件陣列中的值?[復制]
下一篇:具有基于引數的組件數量的元組
