具有两种可能的数组类型

时间:2017-12-19 21:35:47

标签: typescript overloading

我想用一个字符串或对象的rest参数定义一个函数,签名如:

public static fn(...messages: string[] | object[]): void;

但不幸的是,这会导致TS2370编译错误

  

错误TS2370:rest参数必须是数组类型。

我知道像string[]object[]这样的单一类型的数组运行正常,但是这样的函数重载会带来更大的代价。

无论如何,我可以让所提到的功能与所需的签名一起工作吗?

1 个答案:

答案 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(组合字符串和对象使它成为一种类型)。