类型守卫
为什么 x instanceof Foo
不能将 x
的类型缩小至 Foo
?
这取决于 x
是什么?如果 x
的类型不与 Foo
兼容,那么缩小 x
的类型就毫无意义,所以我们不会这么做。
当你发现 x
具有任何类型时,我们对此推荐的做法是:
function doIt(x) {
if (x instanceof Object) {
// Assume 'x' is a well-known object which
// we know how to handle specifically
}
// Treat 'x' as a primitive
}
你将在 TypeScript 中看到这些代码(它们可能早于联合类型被发现),或者是一些从 JavaScript 移植到 TypeScript 的代码,如果我们把 x
缩小至 Object
,那么你将只能做更少的事情。使用任何不在 Object
中的属性都将导致错误。这不仅适用于 Object
,对于具有已定义属性集的任何其他类型都是如此。
看完两件小事
如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:
- 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
- 关注公众号 「IT平头哥联盟」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程