На странице ссылок TypeScript's Decorator есть фрагмент кода, который иллюстрирует, как переопределить конструктор с помощью декоратора классов:
function classDecorator<T extends {new(...args:any[]):{}}>(constructor:T) {
return class extends constructor {
newProperty = "new property";
hello = "override";
}
}
@classDecorator
class Greeter {
property = "property";
hello: string;
constructor(m: string) {
this.hello = m;
}
}
console.log(new Greeter("world"));
и в журналах:
class_1 {
property: 'property',
hello: 'override',
newProperty: 'new property' }
Пока чтохорошо.НО попытка получить доступ к newProperty
по точечной нотации завершается неудачно с:
Свойство 'newProperty' не существует для типа 'Greeter'.ts (2339)
error иэто не указано в подсказках в VS Code.Доступ к нему можно получить с помощью скобочных обозначений, но TS предупреждает, что
Элемент неявно имеет тип 'any', поскольку тип 'Greeter' не имеет индекса signature.ts (7017)
Я что-то пропустил?Как реализовать добавление новых свойств через декораторы безопасным для типов способом?Я хотел бы иметь нормальную поддержку компилятора, как с обычными членами класса.