Мое приложение загружает экземпляры справочных данных.Некоторые экземпляры имеют геттеры, которые используют данные из других справочных данных.Например:
class Person{
name: string
cityId: number
get city(): City {
return City.all.get(this.cityId)!
}
}
Поскольку справочные данные никогда не меняются, вызов метода получения всегда будет возвращать один и тот же результат.Поэтому я хотел бы сделать геттер, который заменит себя своим результатом.Я думал о декораторе, как это:
export const selfReplacing = <T>(target: T, propertyKey: keyof T, descriptor: PropertyDescriptor): any => {
const oldGetter = descriptor.get!
descriptor.get = function (this: T) {
const value = oldGetter.call(this)
Object.defineProperty(this, propertyKey, {
value,
enumerable: true
})
return value
}
}
Что я мог бы использовать так:
class Person{
name: string
cityId: number
@selfReplacing
get city(): City {
return City.all.get(this.cityId)!
}
}
Это лучший способ сделать это?