我想创建一个向类添加方法的装饰器。
export function Deco() {
return function<T extends { new (...args: any[]): {} }>(constructor: T) {
constructor.prototype.someMethod = function() {
};
};
}
@Deco()
class Test {
}
Run Code Online (Sandbox Code Playgroud)
问题是当我尝试调用添加的方法时,出现打字稿错误:
类型 Test 上不存在属性 someMethod。
const test = new Test();
test.someMethod();
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
装饰者不能影响类型的结构。对此有一个简单的解决方法。使用类调用装饰器,并在函数内部使用您想要的方法创建派生类。该函数的结果将是新的“装饰”类,它将具有所有方法:
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();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2533 次 |
最近记录: |