2017-02-01 6 views
0

コンパイルする必要がありますか? this.gには未定義が渡されますが、数字が必要です。これはエラーになるでしょうか?

class A { 
    x: number | undefined; 

    f() { 
     this.x = 1; 
     this.h(); 
     this.g(this.x); 
    } 

    g(q: number) { } 

    h() { this.x = undefined; } 
} 

答えて

4

これはdocumentation用として、正しいです:デフォルトでは

ヌルは未定義は、他のすべてのタイプのサブタイプです。つまり、 は、nullを定義していないの番号のように割り当てることができます。

実際には、xをとして宣言してください。定義されていないまたは単に番号は同等です。

UPDATE:@AlekseyLが指摘したように

、この動作はtruehttps://www.typescriptlang.org/docs/handbook/compiler-options.html)に--strictNullChecksコンパイラオプションを設定することで変更することができます。

厳密なヌル検査モードでは、ヌル値と未定義値はすべての型のドメインにはなく、自分自身と任意のものにのみ割り当てられます(undefinedもvoidに代入可能です)。

+0

これは、_strictNullChecks_モードが有効でない場合は正しいです。 @AlekseyL。 –

+0

それを指摘してくれてありがとう、私は答えを更新しました。 –

+0

残念ながら_strictNullChecks_であっても、この特定のケースでは、コンパイラは(少なくとも今のところ) 'h()'の値が 'undefined'に設定されているためエラーをスローしません。 –

関連する問題