我已经尝试了几种不同的方法来在TypeScript中声明装饰器函数,使装饰类实现接口。事情是这样的:实现接口的TypeScript装饰器声明
interface IValidatable {
checkValidation:() => boolean;
}
function validated<T>(Class: {new():T}): {new():T & IValidatable} {
Class.prototype.checkValidation =() => true;
return Class as {new():T & IValidatable};
}
鉴于上述情况,我希望我可以那么做这样的事情:
@validated
class Foo {
}
let f = new Foo();
let isValid = f.checkValidation();
但最后一行被标记为错误(“财产‘checkValidation’呢在'Foo'类型上不存在。“)。
以下确实在这个意义上工作,它并不会产生错误:
let ValidatedFoo = validated(Foo);
let vf = new ValidatedFoo();
let isValid2 = vf.checkValidation();
有没有办法制定装饰声明使得第一用法示例不产生错误?
看来这是一段时间以来一直存在的问题https://github.com/Microsoft/TypeScript/issues/4881 –