减少Typescript中的getter/setter样板
在Typescript中,我经常发现自己在编写这种getter/setter样板:减少Typescript中的getter/setter样板,typescript,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; } function prop(target: Object, name: string
private _length = 0;
get length(): number { return this._length; }
set length(value: number) { this._length = value; }
在C#中,我知道你可以这样写:
public length { get; set; }
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
});
}
有没有一种等效的方法来简化我的Typescript代码?我发现的一种方法是使用decorator,它是在Typescript 1.5中引入的。实现如下所示:
public length { get; set; }
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;
需要注意的一点是,\u length
属性将添加到对象中。如果你不需要访问它,你就很好!如果确实需要使用它,并且希望它自动完成,则可以对属性进行如下注释:
@prop length = 0; private _length = 0;
+1.此外,将getter和setter decorator分开并仅在需要时使用它们也很有用:
@get@set length=0
,@get id代码>等等。我想知道这样一个能手/能手的意义是什么?也就是说,既然TypeScript中没有覆盖限制,它们与直接暴露字段有什么不同?如果关键是要有一个只读字段,为什么不通过property descriptor?@billc.cn正确地执行它呢?在我的例子中,我实际上是在get/set函数中添加了额外的功能,以便在值更改时触发主对象上的事件。