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

如何通过TypeScript类型系统判断字符串是否全小写/全大写(非运行时检查)

实现方案

核心原理是利用TypeScript内置的Uppercase<T>、Lowercase<T>工具类型配合模板字面量类型特性,将输入的字符串类型和它的大小写转换结果做全等校验,全程在编译阶段完成,无任何运行时代价。


1. 定义基础校验工具类型

// 校验字符串类型是否为全大写
type IsAllUppercase<T extends string> = T extends Uppercase<T> ? true : false;
// 校验字符串类型是否为全小写
type IsAllLowercase<T extends string> = T extends Lowercase<T> ? true : false;

2. 基础使用示例

// 全大写校验
type Test1 = IsAllUppercase<'HELLO'> // 推导结果为 true
type Test2 = IsAllUppercase<'Hello'> // 推导结果为 false
type Test3 = IsAllUppercase<'123ABC_$%'> // 推导结果为 true,非字母字符不影响校验结果

// 全小写校验
type Test4 = IsAllLowercase<'hello'> // 推导结果为 true
type Test5 = IsAllLowercase<'Hello'> // 推导结果为 false
type Test6 = IsAllLowercase<'hello123_$%'> // 推导结果为 true

3. 封装入参约束函数

如果需要在函数入参阶段就强制要求传入全大写/全小写字符串,可以直接用上述类型做约束,编译不匹配就会直接报错,不需要额外写运行时校验逻辑:

// 要求入参必须是全大写字符串
function handleUppercaseStr<T extends string>(str: IsAllUppercase<T> extends true ? T : never) {
  // 内部业务逻辑
}

handleUppercaseStr('HELLO') // 正常通过编译
handleUppercaseStr('Hello') // 编译阶段直接报类型不匹配错误

注意:只有字面量字符串类型才能被正确校验,如果变量的类型被推导为通用string,无法触发精准校验,可以通过as const声明将变量类型收窄为字面量类型即可:

const str1 = 'HELLO' // 自动推导为'HELLO'字面量,可正常校验
const str2 = 'HELLO' as string // 类型为通用string,校验结果会推导为boolean
const str3 = 'HELLO' as const // 显式收窄为字面量类型,可正常校验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:54:02