簡體   English   中英

打字稿。 正確鍵入依賴於同一對象文字中屬性的函數參數

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

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