TypeScript 类装饰器 - 添加类方法 [英] TypeScript class decorators - add class method
本文介绍了TypeScript 类装饰器 - 添加类方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何使用 TypeScript 和装饰器定义属性?
How to define property with TypeScript and decorators?
例如我有这个类装饰器:
For example I have this class decorator:
function Entity<TFunction extends Function>(target: TFunction): TFunction {
Object.defineProperty(target.prototype, 'test', {
value: function() {
console.log('test call');
return 'test result';
}
});
return target;
}
并使用它:
@Entity
class Project {
//
}
let project = new Project();
console.log(project.test());
我有这个控制台日志:
test call entity.ts:5
test result entity.ts:18
此代码正确运行,但 tsc 返回错误:
This code correctly worked, but tsc return error:
entity.ts(18,21): error TS2339: Property 'test' does not exist on type 'Project'.
如何修复这个错误?
推荐答案
据我所知,目前这是不可能的.这里有一个关于这个问题的讨论:issue.
Af far as I know for now this is not possible. There is a discussion on this issue here: issue.
因此,您要么不使用装饰器来扩展类,要么在适当的情况下使用带有声明合并的接口来扩展类型声明.或者使用类型断言(但会丢失类型检查):(
So you either do not use decorators to extend classes, and maybe if appropriate use interfaces with declaration merging to extend type declaration. Or use type assertion (but loosing type checks): (<any>project).test()
这篇关于TypeScript 类装饰器 - 添加类方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文