在Typescript中的模块内使用get/set创建变量
我想在模块内创建一个具有get/set属性的变量。 我看到了一些在类中创建get/set属性的工作示例,如下所示:在Typescript中的模块内使用get/set创建变量,typescript,Typescript,我想在模块内创建一个具有get/set属性的变量。 我看到了一些在类中创建get/set属性的工作示例,如下所示: class MyClass { private view; get View() { return this.view; } set View(value) { this.view = value } } 但我想在模块内做同样的事情: module MyModule { export var view; //I want to create
class MyClass {
private view;
get View() { return this.view; }
set View(value) { this.view = value }
}
但我想在模块内做同样的事情:
module MyModule {
export var view;
//I want to create get/set methods for view property here
}
我该怎么做?我认为这只是疏忽;我将向设计团队提出这一点(除了“我们还没有实现它”之外,我看不出任何明显的理由不允许它)。解决It缺乏一流语言支持的问题相当简单:
module Bar {
var _qua = 42;
declare export var qua: number;
Object.defineProperty(Bar, 'qua', {
get: function() { return _qua; },
set: function(value) { _qua = value; }
});
}
// Works
var x = Bar.qua;
console.log(x);
Bar.qua = 19;
console.log(Bar.qua);
访问者仅适用于“成员”。成员只能是类的一部分,至少typescript是这样的
访问器是在类原型上定义的,这是模块所没有的。如果您真的想要,您可以手动定义它,它确实可以工作
module MyModule {
var view;
export var View;
Object.defineProperty(MyModule, "View", {
get: function () {
console.log(1);
return view;
},
set: function (val) {
console.log(2, val);
view = val;
},
enumerable: true,
configurable: true
});
}
MyModule.View = 555;
window["mm"] = MyModule.View;
正如预期的那样,我得到了以下结果:
> 2 555
> 1
尽管我真的不愿意:)您也可以将其包装到具有静态属性的类中:
module MyModule {
export class MyClass {
private static view;
static get View() { return this.view; }
static set View(value) { this.view = value }
}
}
还没有实现吗?@ryan cavanaugh是否有此功能的更新,以及是否会实现此功能?如果不是,我很想知道原因!