我有这样的功能
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!
}
有什么建议吗?
答案 0 :(得分:3)
您可以为...args
点差参数设置任何类型,但它必须是某个数组
即
function foobar(...args: string[]): any {
....
}
在您的情况下,无法为最后一个对象指定某种类型,但您可以执行类似
的操作function foobar(...args: Array<string | IYourCustomType>): any {
....
}
一般来说,通常的做法是先将固定参数和可选参数放在最后,这样我就可以将函数重写为
function foobar(obj: IYourCustomType, ...args: string[]): any {
....
}