加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

TypeScript类装饰器 – 添加类方法

发布时间:2020-12-15 03:00:01 所属栏目:Java 来源:网络整理
导读:如何使用TypeScript和装饰器定义属性? 例如,我有这个类装饰器: function EntityTFunction extends Function(target: TFunction): TFunction { Object.defineProperty(target.prototype,'test',{ value: function() { console.log('test call'); return 'te
如何使用TypeScript和装饰器定义属性?

例如,我有这个类装饰器:

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返回错误:

entity.ts(18,21): error TS2339: Property 'test' does not exist on type 'Project'.

如何解决此错误?

解决方法

据我所知,目前这是不可能的.这里有一个关于这个问题的讨论: issue.

所以你要么不使用装饰器来扩展类,也许如果合适的话,使用带有声明合并的接口来扩展类型声明.或者使用类型断言(但是丢失类型检查):(< any> project).test()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读