我想创建一个装饰器,为类添加一个方法。
export function Deco() {
return function<T extends { new (...args: any[]): {} }>(constructor: T) {
constructor.prototype.someMethod = function() {
};
};
}
@Deco()
class Test {
}
问题是当我尝试调用添加的方法时,出现 typescript 错误:
Property someMethod does not exist on type Test.
const test = new Test();
test.someMethod();
我该如何解决这个问题?
最佳答案
装饰器不能影响类型的结构。有一个简单的解决方法。用类调用装饰器,并在函数内部用你想要的方法创建一个派生类。该函数的结果将是新的“装饰”类,它将具有所有方法:
export function Deco() {
return function <T extends { new(...args: any[]): {} }>(constructor: T) {
return class extends constructor {
someMethod() {
}
}
};
}
let Test = Deco()(class {
// Other stuff
});
const test = new Test();
test.someMethod();
关于 typescript 添加装饰器类型的方法不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48599889/