如何收窄对象属性的类型?
如何收窄对象属性的类型?
嘿,关于用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
相关产品推荐
相关产品推荐

