Class Factory
A function that returns a class makes a new class on every call, each closing over that call's arguments.
function makeUnit(symbol: string, factor: number) {
let created = 0
class Unit {
value: number
constructor(value: number) {
this.value = value
created++
}
toBase(): number {
return this.value * factor
}
toString(): string {
return `${this.value}${symbol} (${created} made)`
}
}
return Unit
}
const Km = makeUnit("km", 1000)
const Mi = makeUnit("mi", 1609.344)
const trip = new Km(42)
const run = new Mi(3)
console.log(String(trip), trip.toBase(), String(run), run.toBase())
console.log(trip instanceof Km, trip instanceof Mi, Km === Mi, Km.name)
console.log(String(new Km(1)))View source on GitHubexamples/classes/class_factory.ts