Add test
This commit is contained in:
parent
5ebfad6e4a
commit
9277b3f5ad
|
@ -0,0 +1,69 @@
|
|||
// Repro from #7271
|
||||
|
||||
class C1 { item: string }
|
||||
class C2 { item: string[] }
|
||||
class C3 { item: string }
|
||||
|
||||
function foo1(x: C1 | C2 | C3): string {
|
||||
if (x instanceof C1) {
|
||||
return x.item;
|
||||
}
|
||||
else if (x instanceof C2) {
|
||||
return x.item[0];
|
||||
}
|
||||
else if (x instanceof C3) {
|
||||
return x.item;
|
||||
}
|
||||
return "error";
|
||||
}
|
||||
|
||||
function isC1(c: C1 | C2 | C3): c is C1 { return c instanceof C1 }
|
||||
function isC2(c: C1 | C2 | C3): c is C2 { return c instanceof C2 }
|
||||
function isC3(c: C1 | C2 | C3): c is C3 { return c instanceof C3 }
|
||||
|
||||
function foo2(x: C1 | C2 | C3): string {
|
||||
if (isC1(x)) {
|
||||
return x.item;
|
||||
}
|
||||
else if (isC2(x)) {
|
||||
return x.item[0];
|
||||
}
|
||||
else if (isC3(x)) {
|
||||
return x.item;
|
||||
}
|
||||
return "error";
|
||||
}
|
||||
|
||||
// More tests
|
||||
|
||||
class A { a: string }
|
||||
class A1 extends A { }
|
||||
class A2 { a: string }
|
||||
class B extends A { b: string }
|
||||
|
||||
function goo(x: A) {
|
||||
if (x instanceof A) {
|
||||
x; // A
|
||||
}
|
||||
else {
|
||||
x; // never
|
||||
}
|
||||
if (x instanceof A1) {
|
||||
x; // A1
|
||||
}
|
||||
else {
|
||||
x; // A
|
||||
}
|
||||
if (x instanceof A2) {
|
||||
x; // A2
|
||||
}
|
||||
else {
|
||||
x; // A
|
||||
}
|
||||
if (x instanceof B) {
|
||||
x; // B
|
||||
}
|
||||
else {
|
||||
x; // A
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue