Aci*_*dic 5 properties accessor typescript
有没有办法在TypeScript中定义属性module?
这些都没有编译:
module My {
// doesnt work
get Value(): number { return 42; }
// doesn't work either
get function Value(): number { return 42; }
// nope
function get Value(): number { return 42; }
}
Run Code Online (Sandbox Code Playgroud)
现在我被迫使用这个:
module My {
declare var Value: number;
Object.defineProperty(My, "Value", {
get: () => 42
});
}
Run Code Online (Sandbox Code Playgroud)
第二种形式对我来说似乎很混乱,代码提示并没有真正将它视为只读属性而是作为普通变量.
有没有直接在模块内定义属性的标准方法?
不,没有办法module使用任何记录的语言功能在 TypeScript 中声明属性。
你可以用几个稍微绕一点的技术来做到这一点。
Amodule可以扩展现有的class或function。因此,我创建了一个具有static属性的类,然后创建了一个module与class.
class My
{
static get Value():Number {
return 42;
}
}
module My {
var works: boolean = true;
}
alert(My.Value);
Run Code Online (Sandbox Code Playgroud)
它确实会在 JavaScript 生成的代码中生成一个您不会手动执行的奇怪操作(并且无论如何都应该被大多数优化器删除)......它会在My创建模块时重新声明该变量。这不会导致运行时问题,因为该变量已经在 JavaScript 中被提升,并且不会与第一次使用发生冲突。
这是另一种选择:
module Global {
class Inner {
get Value():Number {
return 42;
}
}
export var My;
My = new Inner();
}
var My = Global.My;
alert(My.Value);
Run Code Online (Sandbox Code Playgroud)
虽然它提供了一个额外的命名空间,但您可以随意操作它并使用内部类或根据需要更改它。这样,My变量是全局的,就像module.