如何定义仅允许另一类型中特定字符串字面量的类型?
解决方案
你可以用TypeScript内置的Extract工具类型实现这个需求,它既能限定仅使用原字符串字面量类型中的特定值,又能保持和原类型的关联,避免硬写字面量带来的不一致问题。
基础用法
直接通过Extract从原联合类型中提取指定成员:
type MyStrings = 'A' | 'B' | 'C'; type MyOtherType = { type: Extract<MyStrings, 'A'>; // 仅允许MyStrings中的'A' whatever: string; }
这样type字段的类型严格限定为'A',同时如果后续MyStrings中移除了'A',TypeScript会直接抛出类型错误,确保和原类型的关联有效性。
更灵活的写法
如果需要后续切换目标值,可以先定义一个类型别名指定要选取的成员,再结合Extract使用:
// 后续修改目标值仅需改动这里 type TargetMember = 'A'; type MyStrings = 'A' | 'B' | 'C'; type MyOtherType = { type: Extract<MyStrings, TargetMember>; whatever: string; }
原理说明
Extract<T, U>是TypeScript内置工具类型,作用是从联合类型T中提取所有可赋值给U的成员。这里U指定为你需要的特定字符串,就能精准从原类型MyStrings中筛选出对应的成员,完美兼顾类型限定和原类型关联的需求。
内容的提问来源于stack exchange,提问作者flover
相关产品推荐
相关产品推荐

