用TypeScript中的装饰器扩展类
问题描述:
我想用装饰器扩展一个类,但不知道具体如何。我目前的做法如下:用TypeScript中的装饰器扩展类
function Foo(value: string) {
return function(target: Function) {
let injected = Object.assign(target.prototype, { foo: value });
return injected;
}
}
@Foo("Hello world")
class Bar {
}
let instance = new Bar();
console.log(instance.foo); // Should say "Hello World"
但我不能实例化我的类了:“TypeError:酒吧不是一个构造函数”。
我的错误在哪里?
答
你不必从装饰器中返回一个新的对象。在这种情况下,目标对象将被修改,所以才
function Foo(value: string) {
return function(target: Function) {
Object.assign(target.prototype, { foo: value });
}
}
应该正常工作
可悲的是,这并不工作。 'bar'对象保持不变,试图让'instance.foo'结果'Property'foo'不存在于类型'Bar'上。 – nehalist
@nehalist你在tsconfig中有一个标志'experimentalDecorators'吗?它正在我的本地和游乐场工作https://www.typescriptlang.org/play/ –
@nehalist但是如果你正在谈论打字稿的警告,那只是因为TS编译器无法解决这个属性。只是检查在操场中生成的JS –