具有两种可能的数组类型的Typescript rest参数

Ali*_*Ali 1 overloading typescript

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

public static fn(...messages: string[] | object[]): void;
Run Code Online (Sandbox Code Playgroud)

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

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

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

无论如何,我可以使上述功能与所需的签名一起使用吗?

Sha*_*ard 5

是的,您的rest参数可以有多种类型。但是,必须将其声明为单个数组类型:

declare function fn(...messages: (string | object)[]): void;

// or with custom type:
// type MessageType = string | object;
// declare function fn(...messages: MessageType[]): void;

fn('aaa', { });
Run Code Online (Sandbox Code Playgroud)

否则,您将说它可以接受字符串数组或对象数组,但是只能接受1 typed array(字符串和对象的组合使其成为一种类型)。