網站搜尋

如何在 TypeScript 中為 `...args` 添加類型


我有一個像這樣的函數

function foobar(...args): any {
    ....
}

函數簽名相當一般,但它只接受字串,最後一個參數為 X 類型的物件(全部都是可選的)

foobar();
foobar('a');
foobar('a', 'b', 'c');
foobar('a', { ... });
foonbar('a', 'b', { ... }); 

有沒有某種方式可以添加類型,例如

function foobar(...args: [...string, X]) {  // this doesn't work!

}

有什麼建議嗎?

答案#1

你可以為 ...args 展開參數設定任何類型,但 它必須是一個某種東西的陣列

即

function foobar(...args: string[]): any {
    ....
}

在你的情況下,無法為最後一個物件指定特定類型,但你可以做類似的事情

function foobar(...args: Array<string | IYourCustomType>): any {
    ....
}

一般來說,通常的做法是將固定參數放在前面,選擇性參數放在最後,所以我會將這個函數重寫為

function foobar(obj: IYourCustomType, ...args: string[]): any {
    ....
}

答案#2

從那時起,TypeScript 在對元組進行類型標註的能力上已有所改進。你現在可以對每個元素進行獨特的類型標註。來源:https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-0.html

function getSomething(tuple: [string, boolean]): any => { ... }