gpt4 book ai didi

typescript - TypeScript 中的构造函数重载

转载 作者:搜寻专家 更新时间:2023-10-30 20:28:16 24 4
gpt4 key购买 nike

有人在 TypeScript 中做过构造函数重载吗?在语言规范 (v 0.8) 的第 64 页上,有描述构造函数重载的语句,但没有给出任何示例代码。

我现在正在尝试一个非常基本的类声明;看起来像这样,

interface IBox {    
x : number;
y : number;
height : number;
width : number;
}

class Box {
public x: number;
public y: number;
public height: number;
public width: number;

constructor(obj: IBox) {
this.x = obj.x;
this.y = obj.y;
this.height = obj.height;
this.width = obj.width;
}

constructor() {
this.x = 0;
this.y = 0;
this.width = 0;
this.height = 0;
}
}

当使用 tsc BoxSample.ts 运行时,它会抛出一个重复的构造函数定义——这很明显。任何帮助表示赞赏。

最佳答案

TypeScript 允许您声明重载,但您只能有一个实现,并且该实现必须具有与所有重载兼容的签名。在您的示例中,这可以使用可选参数轻松完成,如

interface IBox {    
x : number;
y : number;
height : number;
width : number;
}

class Box {
public x: number;
public y: number;
public height: number;
public width: number;

constructor(obj?: IBox) {
this.x = obj?.x ?? 0
this.y = obj?.y ?? 0
this.height = obj?.height ?? 0
this.width = obj?.width ?? 0;
}
}

或两个具有更通用构造函数的重载,如

interface IBox {    
x : number;
y : number;
height : number;
width : number;
}

class Box {
public x: number;
public y: number;
public height: number;
public width: number;

constructor();
constructor(obj: IBox);
constructor(obj?: IBox) {
this.x = obj?.x ?? 0
this.y = obj?.y ?? 0
this.height = obj?.height ?? 0
this.width = obj?.width ?? 0;
}
}

参见Playground

关于typescript - TypeScript 中的构造函数重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12702548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com