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

带有两种可能的数组类型的Typescript rest参数,typescript,overloading,Typescript,Overloading,我想定义一个rest参数为字符串或对象的函数,签名如下: public static fn(...messages: string[] | object[]): void; 但不幸的是,这会导致TS2370编译错误 错误TS2370:rest参数必须是数组类型 我知道使用单一类型的数组,比如string[]或object[]可以很好地工作,但是重载这样的函数会带来更大的代价 我是否可以使所提到的函数使用所需的签名?是的,您可以为rest参数使用多种类型。但是,必须将其声明为单个数组类型: de

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

public static fn(...messages: string[] | object[]): void;
但不幸的是,这会导致TS2370编译错误

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

我知道使用单一类型的数组,比如string[]或object[]可以很好地工作,但是重载这样的函数会带来更大的代价


我是否可以使所提到的函数使用所需的签名?

是的,您可以为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个类型化数组,组合字符串和对象使其成为1个类型。

是的,您的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个类型化数组,将字符串和对象组合在一起,使其成为1个类型