You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何定义仅允许另一类型中特定字符串字面量的类型?

解决方案

你可以用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 16:17:33