我们必须为重载函数的每个参数输入类型'any'吗?

时间:2017-06-29 08:14:37

标签: typescript

我想理解,我们必须为重载函数的每个参数输入类型'any'。例如:

- 我们必须这样做吗?

protected func(value: number): void;

protected func(value: string): void;

protected func(value: any): void {
    //...implementation
}

- 或者我们可以这样做吗?

protected func(value: number): void;

protected func(value: string): void;

protected func(value: number | string): void {
    //...implementation
}

如果第二个例子是正确的,那么接下来的问题是:它有更好的方法吗?为什么?

1 个答案:

答案 0 :(得分:0)

两者都有效,甚至还有第三种选择:

protected func(value: number): void;
protected func(value: string): void;
protected func(): void {
    let obj = arguments[0];
    //...implementation
}

(或func(...args: any[])

至于什么更好,这取决于你,你的风格和你想要达到的目标 在您给出的示例中,我选择了:

protected func(value: number | string): void { ... }

但是例如这样的事情:

protected func(value1: number, value2: string[], value3: () => void): void;
protected func(value1: { [key: string]: number }, key: string): void;
protected func(): void { ... }

使用arguments然后提出与前两个匹配的签名更容易。