【发布时间】:2017-04-18 00:38:12
【问题描述】:
我尝试了几种不同的方法来在 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();
但最后一行被标记为错误(“类型 'Foo' 上不存在属性 'checkValidation'。”)。
以下确实在不产生错误的意义上起作用:
let ValidatedFoo = validated(Foo);
let vf = new ValidatedFoo();
let isValid2 = vf.checkValidation();
有没有办法制定装饰器声明,使第一个用法示例不会产生错误?
【问题讨论】:
-
这似乎是一个悬而未决的问题github.com/Microsoft/TypeScript/issues/4881
标签: typescript