函数重载,参数问题
Function overloading, problem with arguments
在此代码中声明了几个重载函数:
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 个参数中抱怨。我不知道这里出了什么问题。如果我再添加一个带有另一个 arg 的重载:
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 调用中,它会给出相同的错误)
怎么了?
最后一个重载签名是实现签名,对外不可见。如果你想要那个界面 public 你需要复制它:
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);
}
在此代码中声明了几个重载函数:
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 个参数中抱怨。我不知道这里出了什么问题。如果我再添加一个带有另一个 arg 的重载:
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 调用中,它会给出相同的错误)
怎么了?
最后一个重载签名是实现签名,对外不可见。如果你想要那个界面 public 你需要复制它:
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);
}