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

TypeScript中如何获取联合类型接口指定分支的嵌套属性?

TypeScript联合类型中精准访问指定接口的属性

编译时类型提取

如果仅需要在类型层面获取A2中a.c的类型,可以使用TypeScript内置的Extract工具类型,从联合类型中筛选出A2成员后再链式访问属性:

// 直接提取联合类型中的A2并访问属性
type E = Extract<D["abc"], A2>["a"]["c"];

Extract<T, U>会从类型T中提取出可分配给U的部分,这里就是从A | A2中精准筛选出A2,后续访问a.c就不会出现属性不存在的错误。

运行时安全访问

如果需要在运行时代码中安全访问该属性,需要配合类型守卫让TypeScript推断出当前对象是A2类型:

方式一:直接使用in操作符

function getCValue(obj: D): C["c"] {
  if ("c" in obj.abc.a) {
    // TypeScript自动推断obj.abc为A2类型
    return obj.abc.a.c;
  }
  throw new Error("当前对象不属于A2类型");
}

方式二:自定义类型守卫函数

// 定义类型守卫,判断对象是否为A2类型
function isA2(abc: A | A2): abc is A2 {
  return "c" in (abc as A2).a;
}

function getCValue(obj: D): C["c"] {
  if (isA2(obj.abc)) {
    // 此处obj.abc已被推断为A2类型
    return obj.abc.a.c;
  }
  throw new Error("当前对象不属于A2类型");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:39:52