Javascript 是否允许通过TypeScript中的另一个字段初始化字段?
我正在尝试在我的TypeScript类中执行此操作:Javascript 是否允许通过TypeScript中的另一个字段初始化字段?,javascript,typescript,Javascript,Typescript,我正在尝试在我的TypeScript类中执行此操作: private _errorHappened = new Subject<SomeError>(); public errorHappened = this._errorHappened.asObservable(); private\u errorOccessed=new Subject(); public errorOccessed=此。_errorOccessed.asObservable(); 我在另一个字段的内联初始
private _errorHappened = new Subject<SomeError>();
public errorHappened = this._errorHappened.asObservable();
private\u errorOccessed=new Subject();
public errorOccessed=此。_errorOccessed.asObservable();
我在另一个字段的内联初始化过程中使用了该字段的值。所提供的示例是有效的,如果我翻转这两行的顺序,它会抛出无法读取未定义的错误的属性“asObservable”。这使我认为解析器自上而下地处理类声明,若您引用上面已经定义的字段,那个么一切都很好
我的问题是:这种行为可以被信任吗?我的意思是,这是一个记录在案的行为,还是它现在“只起作用”,但不能保证将来不会崩溃?在其他一些语言中,这样的初始化是不可能的(您必须使用构造函数)。这在typescript中可以吗?你能链接到文档中的相关部分吗?TypeScript的精神是使用带有类型的JavaScript,但积极地将JavaScript管道中的新功能引入到TypeScript编译器中。所以问题变成了:在中,字段能否在其初始值设定项中使用前一个字段的值
答案是肯定的,至少从目前的情况来看是肯定的。实例(例如,非静态)类字段初始值设定项是在这个
建立之后运行的(这很重要,这意味着我们可以使用这个
),并且它们是按顺序运行的。链接的草稿规范语言中的详细信息
请注意,该提案目前处于中的第2阶段。这意味着它是草稿,草稿可以改变。但如果这方面发生了变化,我会感到惊讶;它很有用,并且与其他语言中的行为一致
也就是说,如果您希望谨慎,您可以始终将初始化推迟到构造函数:
class Example {
private _errorHappened = new Subject<SomeError>();
public errorHappened : /* ...some type here presumably...*/;
constructor() {
this.errorHappened = this._errorHappened.asObservable()
}
}
类示例{
private_errorOccessed=新主题();
发生公共错误:/*…此处可能有某种类型…*/;
构造函数(){
this.errorOccessed=this.\u errorOccessed.asObservable()
}
}