如何使用get属性扩展typescript类?

时间:2017-09-01 14:15:24

标签: typescript

我得到一个类型A的对象实例。如何在Typescript中使用getter函数扩展它?添加我做的功能

A.prototype.testFunction = function () {
  if(this.something) {
    return this.something;
  }
 return null;
}

我在index.d.ts文件中扩展了类型,例如:

interface A {
    testFunction (): SomeType|null;
}

但是如果我想作为一个getter函数出现而不仅仅是作为一个函数,我该如何添加呢?

我尝试查看Object.defineProperty()但是Typescript本身似乎并不乐意使用那个,指的是以下代码中this的错误实例:

Object.defineProperty(A.prototype, "testGet", {
    get: function () {
        if(this.something) { // <== this appears to not refer to type A
          return this.something;
        }
        return null;
    },
    enumerable: false,
    configurable: true
}); 

1 个答案:

答案 0 :(得分:5)

Getters / setter可以简单地声明为interface:

中的属性
interface A {
    testGet: SomeType|null;
}

并在getter函数中指定type of this parameter

Object.defineProperty(A.prototype, "testGet", {
    get (this: A) {
        if(this.something) { 
          return this.something;
        }
        return null;
    },
    enumerable: false,
    configurable: true
});