1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
=== tests/cases/compiler/narrowTypeByInstanceof.ts ===
class Match {
>Match : Match
public range(): any {
>range : () => any
return undefined;
>undefined : undefined
}
}
class FileMatch {
>FileMatch : FileMatch
public resource(): any {
>resource : () => any
return undefined;
>undefined : undefined
}
}
type FileMatchOrMatch = FileMatch | Match;
>FileMatchOrMatch : FileMatchOrMatch
let elementA: FileMatchOrMatch, elementB: FileMatchOrMatch;
>elementA : FileMatchOrMatch
>elementB : FileMatchOrMatch
if (elementA instanceof FileMatch && elementB instanceof FileMatch) {
>elementA instanceof FileMatch && elementB instanceof FileMatch : boolean
>elementA instanceof FileMatch : boolean
>elementA : FileMatchOrMatch
>FileMatch : typeof FileMatch
>elementB instanceof FileMatch : boolean
>elementB : FileMatchOrMatch
>FileMatch : typeof FileMatch
let a = elementA.resource().path;
>a : any
>elementA.resource().path : any
>elementA.resource() : any
>elementA.resource : () => any
>elementA : FileMatch
>resource : () => any
>path : any
let b = elementB.resource().path;
>b : any
>elementB.resource().path : any
>elementB.resource() : any
>elementB.resource : () => any
>elementB : FileMatch
>resource : () => any
>path : any
} else if (elementA instanceof Match && elementB instanceof Match) {
>elementA instanceof Match && elementB instanceof Match : boolean
>elementA instanceof Match : boolean
>elementA : FileMatchOrMatch
>Match : typeof Match
>elementB instanceof Match : boolean
>elementB : FileMatchOrMatch
>Match : typeof Match
let a = elementA.range();
>a : any
>elementA.range() : any
>elementA.range : () => any
>elementA : Match
>range : () => any
let b = elementB.range();
>b : any
>elementB.range() : any
>elementB.range : () => any
>elementB : Match
>range : () => any
}
|