[英]Typescript. Correctly typing function parameter that depends on property in the same object literal
我有一個類型,其中一個取決於另一個:
type source = string | number;
type derivative<T extends source> = T extends string ? string[] : number[];
我可以在函數參數中使用它們並獲得正確的推論:
現在我想在界面中使用它們:
interface Test<T extends source> {
src: T;
handler: (dvr: derivative<T>) => void;
}
同樣,我可以將其用作函數輸入並獲取正確的類型:
但是,如果我需要傳遞多個任務,則打字稿無法推斷正確的類型:
有可能解決這個問題嗎? 大概是通過更改handleTestArr
函數定義。
不幸的是,像元組類型這樣的優雅解決方案在這里不起作用,打字稿將跳至number|string
而不是基於src
進行推斷。
最簡單的解決方案是使用元組參數(具有可選成員),並為元組的每個成員使用幾個類型參數。 這是不理想的(至少我們不必像在3.0之前的Tyepscript的舊版本中那樣為每個數量的參數定義重載)
function handleTestArr<
T extends source,
T1 extends source,
T2 extends source,
T3 extends source,
T4 extends source,
T5 extends source,
T6 extends source,>(ts: [Test<T>, Test<T1>?, Test<T2>?, Test<T3>?, Test<T4>?, Test<T5>?, Test<T6>?])
function handleTestArr(ts: Test<source>[]) {
}
handleTestArr([
{
src: 1,
handler: x => {}, // x is number[]
},{
src: '1',
handler: x => {}, // x is string[]
},
])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.