一个类被装饰为具有foo
静态属性:
interface IFoo {
foo: boolean;
}
function foo<T>() {
return (Class: T): T & IFoo => Object.assign(Class, { foo: true });
}
@foo<typeof Bar>()
class Bar { }
const Baz: IFoo = Bar;
console.log(Baz.foo);
这会导致错误:
键入&#39; typeof Bar&#39;不能分配类型&#39; IFoo&#39;。
TypeScript输入系统似乎忽略了Bar
被装饰的事实。
我意识到装饰器存在某些类型问题。这里的解决方法是什么?
答案 0 :(得分:2)
Typescript不允许装饰器修改装饰类的结构。然而,您可以使用函数taht获取类并修改它:
interface IFoo {
foo: boolean;
}
function foo<T extends new (... args: any[]) => any>(cls:T) : T & IFoo {
return Object.assign(cls, { foo: true });
}
const Bar =foo(class { })
console.log(Bar.foo);