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

如何收窄对象属性的类型?

如何收窄对象属性的类型?

嘿,关于用in操作符收窄对象属性类型这件事,我来给你唠唠~

根据TypeScript官方手册的说明:

in是一个用来判断对象或其原型链上是否存在指定名称属性的操作符,TypeScript会把它当作一种收窄潜在类型的方式。

我理解下面这种写法完全可行:

let obj: object = {};
if ("prop" in obj) {
  // 此时TypeScript已经知道obj包含prop属性,类型被成功收窄
  console.log(obj.prop);
}

再给你举个更实用的联合类型例子,看完你就更清楚了:

type Cat = { meow: () => void };
type Dog = { bark: () => void };

function makeSound(animal: Cat | Dog) {
  if ("meow" in animal) {
    animal.meow(); // 这里TypeScript能确定animal是Cat类型
  } else {
    animal.bark(); // 自动收窄为Dog类型,直接调用bark也不会报错
  }
}

说白了,in操作符就像个小帮手,帮TypeScript确认对象上有没有某个特定属性,把原本宽泛的类型精准收窄到更具体的类型,写代码时就不用再担心类型不匹配的报错啦~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.09 03:02:57