The*_*mer 9 javascript static constructor initialization typescript
我在打字稿中读到一个静态构造函数,并自己尝试了一下,但是它不起作用。我想以此初始化一个静态变量-该方法只能被调用一次。
错误:“静态”修饰符无法出现在构造函数声明中。
码:
export class DataManagement {
private static subjects: string[];
static constructor() {
DataManagement.subjects = [];
//some more code here
}
Run Code Online (Sandbox Code Playgroud)
}
Tho*_*orf 23
虽然 C# 等其他语言确实有静态构造函数,但 TypeScript(和 JavaScript)没有此功能。也就是说,您仍然可以静态地定义一个您自己调用的函数。首先,在我介绍您拥有的选项之前,让我解释一下在哪些情况下您可能需要静态构造函数。
何时使用静态构造函数
在需要计算静态属性值的情况下,静态构造函数很有用。如果您只想设置一个属性(为已知值),则不需要静态构造函数。可以这样做:
class Example {
public static info = 123;
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果您需要计算该值,您可以通过三种方式“模拟”静态构造函数。我查看下面的选项并在每个示例中设置静态属性“信息”。
在下面的代码中,该函数_initialize是在类中静态定义的,并在类声明后立即调用。在函数内部,this指的是类,这意味着该关键字可用于设置任何静态值(info如下例所示)。请注意,无法将函数设为私有,因为它是从外部调用的。
class Example {
public static info: number;
public static _initialize() {
// ...
this.info = 123;
}
}
Example._initialize();
Run Code Online (Sandbox Code Playgroud)
第二种选择是使用一个函数,该函数在类内部创建后直接调用。该函数看起来只是类的一部分,但与类本身无关(除了在类内部定义),这意味着您不能this在函数内部使用。
class Example {
static info: number;
private static _initialize = (() => {
// "this" cannot be used here
Example.info = 1234;
})();
}
Run Code Online (Sandbox Code Playgroud)
基于与选项 2 相同的想法,您可以通过返回值来计算单个属性。如果您只想计算类的一个属性,这可能会很方便。
class Example {
public static info = (() => {
// ... calculate the value and return it
return 123;
})();
}
Run Code Online (Sandbox Code Playgroud)
如果您只想计算单个静态属性,您可能需要使用最后一种(替代)方法。如果您需要进行更复杂的计算或想要设置更多属性,如果您不介意将函数公开,我建议您使用选项 1。否则,请选择选项 2。
请注意,TypeScript 存储库中存在一个问题,其中包含有关选项 1 和选项 2 的更多讨论。
Lla*_*far 20
请注意,从 TypeScript 4.4 开始,支持静态块初始值设定项... https://devblogs.microsoft.com/typescript/announcing-typescript-4-4-rc/#static-blocks
class Foo {
static Foo.count = 0;
// This is a static block:
static {
if (someCondition()) {
Foo.count++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4925 次 |
| 最近记录: |