Перегрузка функции, проблема с аргументами - PullRequest
0 голосов
/ 07 января 2020

В этом коде объявлено несколько функций перегрузки:

export function rect(a: Point, b: Point): Rect;
export function rect(a: Point, b: number|Point, c?: number): Rect;
export function rect(a: number|Point, b: number|Point, c?: number, d?: number ) {return new Rect(a,b,c,d);}
rect( 1,1,1, 1)   // ts: "Expected 2-3 arguments, but got 4.ts(2554)"

Typescript жалуется на 4-й аргумент. Я не мог понять, что здесь не так. Если я добавлю еще одну перегрузку с еще одним аргументом:

export function rect(a: Point, b: Point): Rect;
export function rect(a: Point, b: number|Point, c?: number): Rect;
export function rect(a: number|Point, b: number|Point, c?: number, d?: number ): Rect ;
export function rect(a: number|Point, b: number|Point, c?: number, d?: number, e?: number ): Rect {return new Rect(a,b,c,d);}
rect( 1,1,1, 1)

ts НЕ будет жаловаться (выдает ту же ошибку, если я добавлю 5-й аргумент к вызову rect)

Что не так

1 Ответ

1 голос
/ 07 января 2020

Последняя сигнатура перегрузки является сигнатурой реализации и не видна снаружи. Если вы хотите, чтобы этот интерфейс был опубликован c, вам необходимо скопировать его:

export function rect(a: Point, b: Point): Rect;
export function rect(a: Point, b: number | Point, c?: number): Rect;
export function rect(a: number | Point, b: number | Point, c?: number, d?: number): Rect;
export function rect(a: number | Point, b: number | Point, c?: number, d?: number) {
    return new Rect(a, b, c, d);
}
...