我想用一个字符串或对象的rest参数定义一个函数,签名如:
public static fn(...messages: string[] | object[]): void;
但不幸的是,这会导致TS2370
编译错误
错误TS2370:rest参数必须是数组类型。
我知道像string[]
或object[]
这样的单一类型的数组运行正常,但是这样的函数重载会带来更大的代价。
无论如何,我可以让所提到的功能与所需的签名一起工作吗?
答案 0 :(得分:4)
是的,您的rest参数可以有多种类型。但是,您必须将其声明为单个数组类型:
declare function fn(...messages: (string | object)[]): void;
// or with custom type:
// type MessageType = string | object;
// declare function fn(...messages: MessageType[]): void;
fn('aaa', { });
否则你说它可以接受一个字符串数组或一个对象数组,但它只接受1 typed array
(组合字符串和对象使它成为一种类型)。