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

如何让TypeScript实现类似typeof的自定义函数类型守卫?

让TypeScript通过自定义判断函数自动窄化类型

要实现你想要的类型推断效果,只需把isObject函数改成类型谓词函数——用value is object替代原本的boolean作为返回类型,TypeScript就能识别这个函数是类型守卫,在条件判断后自动窄化变量类型。

修改后的代码示例

File A

function isObject(value: unknown): value is object {
  return typeof value === 'object' && value !== null && !Array.isArray(value);
}

File B

const myVariable: unknown = {}; // 实际场景为解析后的JSON,类型设为unknown

if (isObject(myVariable)) {
  console.log(myVariable.foo); // 此处TypeScript会自动推断myVariable为object类型,不再报错
}

原理说明

类型谓词value is object会告诉TypeScript:当函数返回true时,传入的value参数必然是object类型(对应你函数里判断的非null、非数组对象)。因此在if分支中,myVariable的类型会从unknown被自动窄化为object,允许你直接访问它的属性。

如果需要更精准的类型约束(比如匹配特定结构的对象),还可以把object替换为自定义接口,示例如下:

interface TargetObject {
  foo: string;
}

function isTargetObject(value: unknown): value is TargetObject {
  return isObject(value) && typeof (value as TargetObject).foo === 'string';
}

调用isTargetObject(myVariable)的条件分支里,myVariable会被推断为TargetObject类型,能做更严格的类型校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:50:31