用TypeScript中的装饰器扩展类

用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 }); 
    } 
} 

应该正常工作

+0

可悲的是,这并不工作。 'bar'对象保持不变,试图让'instance.foo'结果'Property'foo'不存在于类型'Bar'上。 – nehalist

+0

@nehalist你在tsconfig中有一个标志'experimentalDecorators'吗?它正在我的本地和游乐场工作https://www.typescriptlang.org/play/ –

+0

@nehalist但是如果你正在谈论打字稿的警告,那只是因为TS编译器无法解决这个属性。只是检查在操场中生成的JS –