类型守卫

为什么 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,对于具有已定义属性集的任何其他类型都是如此。

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「IT平头哥联盟」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

results matching ""

    No results matching ""