У меня есть много подобных классов, которые я хотел бы инициализировать со следующим синтаксисом:
class A {
b: number = 1
constructor(initializer?: Partial<A>) {
Object.assign(this, initializer)
}
}
new A({b: 2})
Я думаю, что возможность инициализации такими средствами является общим поведением, и поэтому я хотел бы изолировать эту логику, чтобы не повторяться в десятках файлов. Я пробовал это:
class Initializable<T> {
constructor(initializer?: Partial<T>) {
Object.assign(this, initializer)
}
}
class A extends Initializable<A> {
b: number = 1
}
new A({b: 2})
Это компилируется, но не работает, потому что неявное super()
идет первым, поэтому b
получает 2
, как и требовалось, но затем получает 1
.
Предлагает ли TypeScript типобезопасное решение для реализации такого поведения во всех моих классах?