TypeScript allows you to declare overloads but you can only have one implementation and that implementation must have a signature that is compatible with all overloads. In your example, this can easily be done with an optional parameter as in,
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; } }
or two overloads with a more general constructor as in,
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; } }
See in Playground