Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否允许通过TypeScript中的另一个字段初始化字段?_Javascript_Typescript - Fatal编程技术网

Javascript 是否允许通过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(); 我在另一个字段的内联初始

我正在尝试在我的TypeScript类中执行此操作:

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()
}
}