我已經嘗試了幾種不同的方法來在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 –