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

如何从TypeScript类型中排除特定字符串值

TypeScript 定义排除指定值的字符串类型

现有类型定义:

type TestName = 'test1' | 'test2' | 'test3';

要定义CustomName类型,允许所有除TestName中值以外的字符串,同时禁止赋值'test1'、'test2'、'test3',可以通过条件类型结合Exclude工具类型实现:

type TestName = 'test1' | 'test2' | 'test3';
type CustomName = string extends TestName ? never : Exclude<string, TestName>;

验证效果

const validName: CustomName = 'test'; // ✅ 编译通过
const invalidName1: CustomName = 'test1'; // ❌ 类型错误:"test1" 无法分配给 CustomName
const invalidName2: CustomName = 'test2'; // ❌ 同上错误
const invalidName3: CustomName = 'test3'; // ❌ 同上错误

说明

直接使用Exclude<string, TestName>会被TypeScript简化为string(因为string是所有字符串字面量的超集),所以需要外层的条件类型string extends TestName ? never : ...来强制TypeScript保留排除约束,从而对指定字面量进行编译时检查。

注意:如果赋值的是动态生成的string类型变量(而非字面量),TypeScript无法进行精确检查,这类赋值会被允许。

内容的提问来源于stack exchange,提问作者Ewan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:15:16