2017-04-14 50 views
6
export type Size = 
| 'small' 
| 'medium' 
| 'large' 
| 'big' 
| 'huge'; 

定義Size型這樣的處理枚舉給我自動完成我的IDE,無論我用它:與流動型

enter image description here

不過,我也想利用這些值內一個組件:讓我們說一個下拉菜單w /可用大小值。

爲了實現這一目標,我保持尺寸物體外面,我可以通過利用$鍵提取大小流動型:

這樣的工作,因爲它指向一個支柱無效值: enter image description here

然而,這個解決方案是有代價的:它擰我所有的自動完成goodne ss ... :(有沒有更好的方法來處理FlowType中的枚舉?

enter image description here

回答

1

這是一個整潔的使用$Keys

我不知道從對象派生Size類型的更好方法。也許你可以在這樣的另一個方向:

export type Size = 
| 'small' 
| 'medium' 
| 'large' 
| 'big' 
| 'huge'; 

export const sizes: { [key: string]: Size } = { 
    small: 'small', 
    medium: 'medium', 
    large: 'large', 
    big: 'big', 
    huge: 'huge', 
}; 

或者是消除位複製的是這樣的:

export const sizes: { [key: string]: Size } = [ 
    'small', 
    'medium', 
    'large', 
    'big', 
    'huge' 
].reduce((obj, s) => { 
    obj[s] = s 
    return obj 
}, {}) 

顯然使用更多的樣板。但是對於sizes的類型約束,您至少會得到一個檢查,以防止無效字符串進入sizes對象。

+0

我需要考慮這個,對不起。但是,是的,我同意這是解決這個問題的一個非常簡單的方法。正是我在找什麼。謝謝(我喜歡第一種方法,但第二種方法太神祕了,需要花費很多精力來快速解析它,以便快速理解實際發生的情況) – soosap

+0

@ jessie-hallett這很好,但不幸的是,如果我註釋我的對象,像vscode和原子編輯器鬆散對象上存在的屬性的自動完成功能。對這個問題有補救嗎? – soosap

+0

我爲自動填充問題提交了一張票,如果您想跟進看看:) https://github.com/facebook/flow/issues/5431 – soosap