2017-09-25 30 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)? 初始化時強制執行這個不同要求的兩個定義之間有什麼區別?

Typesript版本:2.3.4

回答

4

即使在運行時有一個未定義值的關鍵,不存在一個關鍵的差異。該TypeScript允許區分並不奇怪。

試試這個:

Object.keys({a: undefined}); 

如果離開a並設置它的值是undefined是同樣的事情,然後我們預計上述返回一個空數組,但事實上它返回

[ 'a' ] 
相關問題