{ msg: string, args: unknown[]} { if (args) { return { msg: msg, ...

问题描述 投票:0回答:1
The function implementation is not part of all available overloads. Instead you can write:

Playground sample

class Test {
  a(msg: string): string;
  a(msg: string, ...args: unknown[]): string | { msg: string, args: unknown[]} {
    if (args) {
      return { msg: msg, args: args };
    }
    return msg;
  }
}

new Test().a("test", "a", 1, 2, 3);

Typescript does not support function overloading with different number of parameters.

Documentation

says:
typescript overloading
1个回答
2
投票

One trick to achieve what you are trying could be this

class Test {
    a(msg: string): string; // overload 1
    a(msg: string, ...args: unknown[]): { msg: string, args: unknown[] } // overload2
    a(msg: string, ...args: unknown[]): string | { msg: string, args: unknown[] } { // impl
       // ...
    }
}
new Test().a("test", "a", 1, 2, 3); // { msg: string; args: unknown[]; }
new Test().a("test") // string

我有一个类定义如下。

2
投票

"预期有1个参数,但得到5个"我如何正确地重载这个方法,为不同的签名提供不同的返回类型?

我有一个类定义如下: class Test { a(msg: string): string; a(msg: string, ...args: unknown[]): string

© www.soinside.com 2019 - 2024. All rights reserved.