如何在打字稿中向`...args`添加类型

How to add types to `...args` in typescript

我有这样的功能

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!

}

有什么建议吗?

您可以为 ...args 传播参数设置您想要的任何类型,但 它必须是一些东西的数组

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

在你的情况下,没有办法为最后一个对象指定特定类型,但你可以做类似

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

一般来说,通常的做法是将固定参数放在第一位,将可选参数放在最后,所以我将函数重写为

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

打字稿输入元组的能力已经有了改进。您现在可以唯一地键入每个元素。资料来源:https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-0.html

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