如何提取未导出的React Context值类型?有更优雅方案吗?
获取未导出的Context值类型的优雅方案
方案1:使用TypeScript内置的ContextType工具类型
TypeScript 提供了专门用于提取 React Context 值类型的工具类型ContextType,这比通过ComponentProps取Provider的value更直观,属于官方推荐的直接方式:
import type { ContextType } from 'react'; import type { LocationContext } from 'your-library'; type LocationContextObject = ContextType<typeof LocationContext>;
方案2:自定义类型提取工具
如果不想依赖内置工具,也可以自己写一个极简的类型提取器,逻辑直白清晰:
import type { LocationContext } from 'your-library'; type ExtractContextValue<T extends React.Context<any>> = T extends React.Context<infer V> ? V : never; type LocationContextObject = ExtractContextValue<LocationContext>;
与原写法的对比
你的原写法虽然可行,但属于间接推导——通过Provider组件的属性反向获取值类型。而上面两种方案都是直接从Context类型本身提取值类型,语义更明确,也更符合类型操作的直接性原则。
内容的提问来源于stack exchange,提问作者Gabin
相关产品推荐
相关产品推荐

