我怀疑我要描述的是预期的行为,除了我没有预料到,它似乎是一个糟糕的选择,我找不到任何描述它的文档。
我创建了一个简单的Typescript类,用于Angular应用程序作为Provider的一部分。我提到最后一部分,以防万一它是相关的,但我认为不是。
这是班级
class Config {
public settings: Object;
public locale: Object;
public $get: () => Config;
constructor() {
this.$get = () => this;
}
}
我已经尝试了上述代码的各种各样的版本(使用"任何"而不是Object,不同的定义$ get等等)但是生成具有两个成员的对象的唯一版本变量(设置/语言环境)是我明确为它们设置值的版本。例如,下面的代码将生成一个带有设置成员的对象(设置为空对象{}),但没有区域设置成员:
class Config {
public settings: Object;
public locale: Object;
public $get: () => Config;
constructor() {
this.settings = {};
this.$get = () => this;
}
}
一般来说,我所期望的是存在未初始化的类型成员变量,具有其类型的默认值("任何",我认为,合理地未定义),因此,在此大小写,设置仍然是{},但语言环境也是如此。
这绝对不会发生,我只是在找人确认我所看到的是正确的行为,并且(希望)指出我的文档或以其他方式解释原因。
我不怀疑这是一个很好的理由,它只是让我想念它可能是什么。
答案 0 :(得分:0)
有些人认为类实例应该初始化所有成员。有些人认为他们应该只初始化明确初始化的成员。编译器应该做什么?
很容易理解如何“选择加入”初始化:
class Config {
public settings: Object = undefined;
/* ... */
}
如果你想象成员被自动初始化的反向设计,你很清楚如何向编译器表明你不希望settings
被初始化。