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

TypeScript条件类型中如何实现严格类型检查,避免any返回联合类型

问题根因

你原代码的条件类型遇到any时会触发TS的特殊处理:any extends 任意类型的判断会同时命中true和false两个分支,最终返回两个分支结果的联合类型,所以你才会得到'false' | 'true'的结果。

解决方案

TS中可以通过泛型函数的类型对比实现类似JS===的严格类型相等判断,具体实现如下:

// 严格类型相等判断工具,效果等同于类型层面的 ===
type Equals<X, Y> =
  (<T>() => T extends X ? 1 : 2) extends
  (<T>() => T extends Y ? 1 : 2) ? true : false;

// 改造你的工具类型
type isFalseAndNotAny<T> = Equals<T, false> extends true ? 'false' : 'true';

// 测试结果符合预期
type A = isFalseAndNotAny<any>; // 类型为 'true'
type B = isFalseAndNotAny<false>; // 类型为 'false'

工具特性

这个Equals工具可以正确处理所有特殊类型的严格比对,不会出现普通extends关键字的兼容判定问题:

  • 可以区分any、never、unknown三种特殊类型
  • 仅当两个类型完全一致时才返回true,不会把子类型、兼容类型判定为相等
  • 可以正确区分联合类型、交叉类型的差异

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:09:03