type PointProps = [number, number] | { x: number y: number } | number; export class Point { public x = 0; public y = 0; get values(): [number, number] { return [this.x, this.y]; } constructor(props?: PointProps, y?: number) { if (typeof props === 'number') { if (y) { this.x = props; this.y = y; } else { throw new Error('Wrong props'); } } else if (Array.isArray(props)) { this.x = props[0]; this.y = props[1]; } else if (props) { this.x = props.x; this.y = props.y; } } } export type BezierPoints = [number, number, number, number]; export class Bezier { private _points: BezierPoints; get points() { return [...this._points] as BezierPoints; } constructor(x1: number, y1: number, x2: number, y2: number) { this._points = [x1, y1, x2, y2]; } }