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

如何通过函数实现TypeScript对象属性的类型收窄?

解决TypeScript对象属性的类型收窄问题

你遇到的核心问题是:普通返回布尔值的函数无法让TypeScript关联到对象属性的类型收窄逻辑,只需用类型谓词函数就能解决,完全不需要创建新类型。

把你的判断函数改成下面这样即可:

type Test = {
    property: string | null
}

// 将返回类型从boolean替换为类型谓词
const propIsNotNull = (data: Test): data is { property: string } => {
    return data.property !== null
}

const testData: Test = {
    property: 'nonull'
}

if (propIsNotNull(testData)) {
    console.log(testData.property.toUpperCase()) // 不再报错
}

原理说明

类型谓词data is { property: string }明确告诉TypeScript:当函数返回true时,传入的data参数属于Test的子类型,且property必然是string而非null。TS会基于这个规则自动对testData做类型收窄,后续访问属性时就不会再提示可能为null。

如果是更复杂的嵌套类型,同样可以直接在类型谓词里描述收窄后的结构:

type NestedTest = {
    nested: {
        value: number | null
    }
}

const nestedValueIsNotNull = (data: NestedTest): data is { nested: { value: number } } => {
    return data.nested.value !== null
}

这种方式既保留了代码的可读性,又通过类型谓词给TS补充了类型判断的逻辑关联,完全不需要额外定义新类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:20:34