减少Typescript中的getter / setter样板

时间:2015-06-07 01:55:26

标签: typescript

在Typescript中,我经常发现自己编写了这种getter / setter样板:

private _length = 0;

get length(): number { return this._length; }
set length(value: number) { this._length = value; }

在C#中,我知道你可以这样写:

public length { get; set; }

是否有相同的方法来简化我的Typescript代码?

1 个答案:

答案 0 :(得分:6)

我发现的一种方法是使用在Typescript 1.5中引入的装饰器。实现如下:

function prop(target: Object, name: string) {
  Object.defineProperty(target, name, {
    get: function() { return this["_" + name]; },
    set: function(value) { this["_" + name] = value; },
    enumerable: true,
    configurable: true
  });
}

现在,您可以使用以下代码替换OP中的代码:

@prop length = 0;

需要注意的一点是,_length属性将添加到对象中。如果您不需要访问它,那就太好了!如果您确实需要使用它,并且希望它自动完成,您可以像这样注释属性:

@prop length = 0; private _length = 0;