我想创建一个向类添加方法的装饰器。
export function Deco() {
return function<T extends { new (...args: any[]): {} }>(constructor: T) {
constructor.prototype.someMethod = function() {
};
};
}
@Deco()
class Test {
}
问题是当我尝试调用添加的方法时,我收到打字稿错误:
属性someMethod在类型Test上不存在。
const test = new Test();
test.someMethod();
我该如何解决这个问题?
答案 0 :(得分:3)
装饰者不能影响该类型的结构。有一个简单的解决方法。使用类调用装饰器,并在函数内部使用所需的方法创建派生类。函数的结果将是新的“装饰”类,它将具有所有方法:
<form action="#">
<input type="text" pattern="^.+\.png$" value="" required >
<input type="submit" value="submit"/>
</form>