TypeScript/tests/cases/compiler/typeGuardConstructorClassAndNumber.ts
Anders Hejlsberg 2b0f351005
Fix narrow-by-constructor logic (#37698)
* Fix narrow-by-constructor logic

* Add regression test
2020-03-30 19:31:16 -07:00

130 lines
2.2 KiB
TypeScript

// Typical case
class C1 {
property1: string;
}
let var1: C1 | number;
if (var1.constructor == C1) {
var1; // C1
var1.property1; // string
}
else {
var1; // number | C1
}
if (var1["constructor"] == C1) {
var1; // C1
var1.property1; // string
}
else {
var1; // number | C1
}
if (var1.constructor === C1) {
var1; // C1
var1.property1; // string
}
else {
var1; // number | C1
}
if (var1["constructor"] === C1) {
var1; // C1
var1.property1; // string
}
else {
var1; // number | C1
}
if (C1 == var1.constructor) {
var1; // C1
var1.property1; // string
}
else {
var1; // number | C1
}
if (C1 == var1["constructor"]) {
var1; // C1
var1.property1; // string
}
else {
var1; // number | C1
}
if (C1 === var1.constructor) {
var1; // C1
var1.property1; // string
}
else {
var1; // number | C1
}
if (C1 === var1["constructor"]) {
var1; // C1
var1.property1; // string
}
else {
var1; // number | C1
}
if (var1.constructor != C1) {
var1; // C1 | number
var1.property1; // error
}
else {
var1; // C1
}
if (var1["constructor"] != C1) {
var1; // C1 | number
var1.property1; // error
}
else {
var1; // C1
}
if (var1.constructor !== C1) {
var1; // C1 | number
var1.property1; // error
}
else {
var1; // C1
}
if (var1["constructor"] !== C1) {
var1; // C1 | number
var1.property1; // error
}
else {
var1; // C1
}
if (C1 != var1.constructor) {
var1; // C1 | number
var1.property1; // error
}
else {
var1; // C1
}
if (C1 != var1["constructor"]) {
var1; // C1 | number
var1.property1; // error
}
else {
var1; // C1
}
if (C1 !== var1.constructor) {
var1; // C1 | number
var1.property1; // error
}
else {
var1; // C1
}
if (C1 !== var1["constructor"]) {
var1; // C1 | number
var1.property1; // error
}
else {
var1; // C1
}
// Repro from #37660
function foo(instance: Function | object) {
if (typeof instance === 'function') {
if (instance.prototype == null || instance.prototype.constructor == null) {
return instance.length;
}
}
}