<!-- 🚨 STOP 🚨 STOP 🚨 STOP 🚨 Half of all issues filed here are duplicates, answered in the FAQ, or not appropriate for the bug tracker. Even if you think you've found a *bug*, please read the FAQ first, especially the Common "Bugs" That Aren't Bugs section! Please help us by doing the following steps before logging an issue: * Search: https://github.com/Microsoft/TypeScript/search?type=Issues * Read the FAQ: https://github.com/Microsoft/TypeScript/wiki/FAQ Please fill in the *entire* template below. --> <!-- Please try to reproduce the issue with the latest published version. It may have already been fixed. For npm: `typescript@next` This is also the 'Nightly' version in the playground: http://www.typescriptlang.org/play/?ts=Nightly --> **TypeScript Version:** 4.2.0-dev.20201127 <!-- Search terms you tried before logging this (so others can find this issue more easily) --> **Search Terms:** switch, narrow, constructor **Code** ```ts function foo(o: any) { switch (o.constructor) { case Array: { o // o: any } } } function bar(o: any) { if (o.constructor === Array) { o // o: any[] } } ``` **Expected behavior:** Both functions narrow the value to `any[]` **Actual behavior:** Switch fails to narrow value **Playground Link:** [playground](https://www.typescriptlang.org/play?ts=4.2.0-dev.20201129#code/GYVwdgxgLglg9mABMOcAUcBciCGYCeAlIgN4CwAUItYgM4DuMUEAFohgHQQK1QBOIaHD7FyVGhIg5aAU0QBBPnxz5sYiRppxEAeh2IsuApU3UAviZoWK10JFgJEAIxx8M2PEVKXqMYOzguHn5BKGFEAF4ohSUVUR8NbT0DDwIAbQBdBOszIA) **Related Issues:** https://github.com/microsoft/TypeScript/issues/2214#issuecomment-431470212, #32774