Polymorphic Constructors
Classes with multiple constructor signatures, dispatched automatically
/#
## Polymorphic Constructors
Classes can have multiple constructor declarations. The first becomes the
real JS constructor; the rest become factory functions that produce
correct `instanceof` results.
Classes are callable without `new` by default in native TJS, giving you
clean, expressive object creation with no directive needed.
#/
class Point {
constructor(x: 0.0, y: 0.0) {
this.x = x
this.y = y
}
constructor(coords: { x: 0.0, y: 0.0 }) {
this.x = coords.x
this.y = coords.y
}
distanceTo(other: { x: 0.0, y: 0.0 }): 0.0 {
const dx = this.x - other.x
const dy = this.y - other.y
return Math.sqrt(dx * dx + dy * dy)
}
}
test 'construct with two numbers' {
const p = Point(3, 4)
expect(p.x).toBe(3)
expect(p.y).toBe(4)
}
test 'construct with object' {
const p = Point({ x: 10, y: 20 })
expect(p.x).toBe(10)
expect(p.y).toBe(20)
}
test 'methods work on both variants' {
const a = Point(0, 0)
const b = Point({ x: 3, y: 4 })
expect(a.distanceTo(b)).toBe(5)
}