typescript - 如何使用类装饰器向类添加新属性?

标签 typescript

如何使用类装饰器向类添加新属性?

代码示例:

@MyClassDecorator
class MyClass {
    myFirstName: string;
    myLastName: string;
}

// I need something like this:
function MyClassDecorator (target: any): any {
    target['myNickname'] = 'Gambler';
}

let myClass = new MyClass();
console.log(myClass['myNickname']); // expecting "Gambler" but got "undefined"

如何修复此代码?

是否可以使用装饰器向类添加属性?

谢谢!

最佳答案

您需要将属性添加到原型(prototype)而不是构造函数:

function MyClassDecorator(target: any): any {
    target.prototype.myNickname = "Gambler";
}

这会让你得到你想要的,但问题是你将无法在没有 typescript 提示的情况下访问这个属性:

let myClass = new MyClass();
console.log(myClass.myNickname); // error: Property 'myNickname' does not exist on type 'MyClass'

你可以试试这样的:

function myClassFactory(): MyClass & { myNickname: string } {
    return new MyClass() as MyClass & { myNickname: string };
}

let myClass = myClassFactory();
console.log(myClass.myNickname); // all good

( code in playground )

关于typescript - 如何使用类装饰器向类添加新属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41000670/

相关文章:

javascript - 在 webpack 编译的 JavaScript 中读取 NodeJS process.argv

javascript - 有没有办法在 Typescript 中自动检查数据类型的数据相等性?

angular - RXJS 在新值可用时取消订阅

javascript - webpack 和 babel-polyfill : Can't resolve 'core-js/modules/es6.array.map' in source directory

javascript - 展开时控制台日志中的输出不匹配

javascript - 每当我调用保存方法时调用保存方法

angularjs - 有没有人尝试过在 AngularJS HTML 页面中使用 typescript 枚举?

javascript - Angular 和 RxJs 结合了两个 http 请求

javascript - 从 Typescript 创建可读的 JS

javascript - 这个 Angular 2 示例到底如何工作,展示了如何通过父组件使用子组件属性?