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

TypeScript 如何让自定义校验函数支持变量类型断言与类型收窄

解决方案

你需要使用TypeScript提供的**类型谓词(Type Predicate)**语法定义校验函数,TS就可以识别这类函数的返回结果用作类型收窄,实现你要的自定义类型断言能力。

1. 非空校验场景修正代码

// 用 val is null | undefined 定义类型谓词,表示函数返回true时,val的类型为 null | undefined
function isNull(val: any): val is null | undefined {
    return val == null
}
function fn(val: string | null) {
    if (isNull(val)) return 
    // 此时TS可以正确收窄val类型为 string,可正常调用split方法
    val.split(",")
}

2. 数值类型校验场景修正代码

注意你原代码里的isNumber函数逻辑有误,判断值是否为数值类型需要用typeof操作符,修正后如下:

// 类型谓词声明返回true时,val类型为number
function isNumber(val: any): val is number {
    return typeof val === "number"
}
function fn2(val: string | number) {
    if (isNumber(val)) return 
    // 此时TS可以正确收窄val类型为 string,可正常调用split方法
    val.split(",")
}

原理说明

类型谓词是TS专门为自定义类型校验函数设计的语法,格式为参数名 is 目标类型,作为函数的返回值类型声明。当函数返回true时,TS会自动将入参的类型收窄为你声明的目标类型,就可以达到和原生类型判断语句一样的类型收窄效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 13:42:01