在TypeScript中如何限制变量仅能取指定的预定义合法值?
实现方式分为编译时静态限制和运行时校验两部分:
1. 编译时静态类型限制
首先用TS的字符串字面量联合类型替换原来的string类型声明,直接在编译阶段拦截非法的字面量赋值:
// 先定义Gender类型,仅允许两个合法值 type Gender = 'male' | 'female' let gender: Gender
如果后续你直接给gender赋值为"other"这类不在联合类型里的字面量,TS会在编码/编译阶段直接抛出类型错误,提前拦截问题。
2. 运行时校验+异常抛出
需要注意TS的类型检查仅在编译阶段生效,如果someFunction()的返回值是动态来源(比如接口返回、用户输入等运行时才能确定的值),光靠静态类型拦不住非法值,这时候需要补充运行时校验逻辑,还可以搭配类型谓词实现自动类型收窄:
type Gender = 'male' | 'female' let gender: Gender // 类型谓词函数,校验入参是否为合法Gender值 function isValidGender(value: unknown): value is Gender { return value === 'male' || value === 'female' } const rawGender = someFunction() if (isValidGender(rawGender)) { // 校验通过后TS会自动识别rawGender为Gender类型,可直接赋值 gender = rawGender } else { // 非法值直接抛出错误 throw new Error(`Invalid gender value: ${rawGender}, only 'male' and 'female' are allowed.`) }
如果场景比较简单,也可以直接在赋值前做判断:
const rawGender = someFunction() if (rawGender !== 'male' && rawGender !== 'female') { throw new Error(`非法gender值`) } gender = rawGender
内容的提问来源于stack exchange,提问作者yksolanki9
相关产品推荐
相关产品推荐

