如何将常量值用作FlowType字面量?避免重复字符串定义
解决FlowType中常量与类型字面量重复的问题
嘿,刚接触Flow就遇到这个重复定义的问题很正常!你现在的代码里,常量和类型里的字符串写了两遍,不仅麻烦还容易出错——以后要改状态名称的话,得同时改两处。下面给你两种靠谱的解决方法:
方法一:用$Values工具类型(推荐)
把所有状态常量放到一个对象里,然后用Flow的$Values工具类型直接提取对象的值作为类型。这样只需要写一次字符串,常量和类型都从这个对象派生:
// @flow // 先把所有状态集中在一个对象里 const STATES = { INITIAL: 'INITIAL', LOADING: 'LOADING', LOADED: 'LOADED', FAILED: 'FAILED' }; // 导出单个常量,保持原来的使用方式 export const { INITIAL, LOADING, LOADED, FAILED } = STATES; // 从对象的值中提取联合类型 export type State = $Values<typeof STATES>;
这样修改后,无论是新增状态还是修改状态名称,只需要在STATES对象里改一次就行,常量和类型会自动同步,完全避免重复。
方法二:用typeof联合常量类型
如果你更习惯单独导出每个常量,也可以用typeof获取每个常量的字面量类型,然后把它们联合起来:
// @flow export const INITIAL = 'INITIAL'; export const LOADING = 'LOADING'; export const LOADED = 'LOADED'; export const FAILED = 'FAILED'; // 用typeof获取每个常量的字面量类型,再联合成State类型 export type State = typeof INITIAL | typeof LOADING | typeof LOADED | typeof FAILED;
这种方式虽然还是要列出所有常量,但不用重复写字符串了——字符串只在常量定义里出现一次,类型部分完全依赖常量的类型推导,也能避免手动重复的问题。
两种方法都能解决你的痛点,个人更推荐第一种,尤其是当状态数量多的时候,维护起来更省心!
内容的提问来源于stack exchange,提问作者Matt Huggins
相关产品推荐
相关产品推荐

