如何在 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 => { ... }
