如何定义TypeScript类型以强制选择器符合命名与类型规则?
问题:类Redux Store组合框架
createBundle函数的参数类型约束实现 我正在开发一款类Redux的Store组合框架,需要为框架中的createBundle(对应示例中的Init)函数实现参数类型约束,确保开发者传入的参数符合以下模式:
- 参数包含
name字符串字段与selectors对象字段; selectors对象的每个键必须遵循select${Capitalize<string>}的命名规则;selectors对象的每个值必须为Selector类型(定义为<S>(state: S) => unknown)。
需要让类型系统能够检测以下四种场景:
- CASE 1:键名不符合规则且值类型错误;
- CASE 2:键名符合规则但值类型错误;
- CASE 3:键名不符合规则但值类型正确;
- CASE 4:键名与值类型均符合规则(合法场景)。
我尝试了两种BundleSelectors类型定义,但均无法满足需求:
版本1:
type BundleSelectors<T> = { [I in keyof T]: Selector }
版本2:
type BundleSelectors = Record<`select${string}`, Selector>
现寻求正确的BundleSelectors类型定义,以实现上述全部约束与错误检测能力。
内容的提问来源于stack exchange,提问作者Dellirium
相关产品推荐
相关产品推荐

