我正在尝试在TypeScript类中执行此操作:
private _errorHappened = new Subject<SomeError>();
public errorHappened = this._errorHappened.asObservable();
我在另一个字段的内联初始化期间使用字段的值.提供的示例有效,如果我翻转这两行的顺序,则会抛出无法读取未定义错误的属性“ asObservable”.这使我认为解析器自上而下地处理类声明,并且如果您引用上面已经定义的字段,那么一切都很好.
我的问题是:这种行为可以信任吗?我的意思是,这是有记录的行为,还是现在“可以正常使用”,但不能保证将来不会中断?在其他一些语言中,这样的初始化是不可能的(您必须使用构造函数).这在打字稿中还可以吗?您可以链接到文档中的相关部分吗?
解决方法:
TypeScript的精神是具有类型的JavaScript,但会积极地将JavaScript管道中的新功能引入TypeScript编译器.因此问题就变成了:在JavaScript proposal for public class fields中,字段可以在其初始化程序中使用前一个字段的值吗?
答案是肯定的,至少目前情况如此.实例(例如,非静态)类字段初始化程序在建立之后运行(这很重要,这意味着我们可以使用它),并且它们按顺序运行.链接的草案规范语言中的详细信息.
请注意,此提议当前处于the process的第2阶段.这意味着它是草稿,并且草稿可以更改.但是如果这方面发生了变化,我会感到惊讶.它很有用,并且与其他语言的行为保持一致.
就是说,如果您想保持谨慎,可以始终将初始化推迟到构造函数中:
class Example {
private _errorHappened = new Subject<SomeError>();
public errorHappened : /* ...some type here presumably...*/;
constructor() {
this.errorHappened = this._errorHappened.asObservable()
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。