2017-09-25 7 views
3

オプションのフィールドを持つインターフェイスを定義します。私は次のことが同義語だと思った。Typescript:オプションフィールドと未定義の共用体の違いは何ですか?

(A)

interface State { 
    userDetails: undefined | string | DataStructure | Error; 
} 

(B)

interface State { 
    userDetails?: string | DataStructure | Error; 
} 

しかし、私は状態を初期化するために行く、そのような私は明示的に未定義のフィールドを設定する(A)力:

static readonly initialAppState: AppState = { 
    userDetails: undefined 
}; 

ただし、(B)私は完全にフィールドを省略することができます

static readonly initialAppState: AppState = { }; 

を私は活字体が言って文句を言うでしょう定義(A)を使用している場合、フィールドを省略しようとした場合:使用しているとき、私はフィールドを明示的に設定しなければならないのはなぜ

Property 'userDetails' is missing in type 

を定義(A)? 初期化時にこの異なる要件を強制する2つの定義の違いは何ですか?

Typesriptバージョン:2.3.4

答えて

4

でも実行時に未定義の値を持つキーが存在しないキーとの間の差があります。差別化を可能にするTypeScriptは驚くべきことではありません。

このお試しください:aアウトを残すと設定した場合、それはundefinedされる値です

Object.keys({a: undefined}); 

はその後、我々は上記の空の配列を返すことを期待していたものと同じものであったが、実際には

を返します。
[ 'a' ] 
関連する問題