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

TypeScript中如何创建typeof返回值构成的动态联合类型

报错原因

typeof是JavaScript语法层面的内置操作符,不属于值空间的可引用实体——它既不是函数也不是变量,不存在可以被typeof关键字捕获类型的值实体。因此写typeof typeof时,TS编译器会直接抛出「找不到名称'typeof'」的错误,自然也无法通过ReturnType工具类型推导它的返回值。另外示例代码中的ReturType存在拼写错误,正确名称为ReturnType,但即使修正拼写,该写法依然无法正常工作。

实现方案

方案1:硬编码固定联合类型(生产环境推荐)

ECMAScript规范明确定义了typeof操作符的所有可能返回值,一共8种字符串字面量,直接定义即可100%覆盖所有场景,无额外类型推导开销:

type TypeOf = 
  | "string"
  | "number"
  | "bigint"
  | "boolean"
  | "symbol"
  | "undefined"
  | "object"
  | "function"

补充说明:typeof null返回"object"是规范定义的历史行为,该值已经被包含在上述联合类型中,无需额外补充。

方案2:类型体操动态推导

如果不想硬编码字面量,可以通过条件类型模拟typeof的判断逻辑,传入所有基础类型后自动推导出完整联合类型:

type TypeOfValue<T> = 
  T extends string ? "string" :
  T extends number ? "number" :
  T extends bigint ? "bigint" :
  T extends boolean ? "boolean" :
  T extends symbol ? "symbol" :
  T extends undefined ? "undefined" :
  T extends Function ? "function" :
  "object";

// 传入所有可能触发不同typeof返回值的类型,得到完整联合
type TypeOf = TypeOfValue<
  string | number | bigint | boolean | symbol | undefined | Function | object | null
>;

两种方案得到的TypeOf类型完全一致,都可以匹配所有合法的typeof返回值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 08:27:24