//// [narrowTypeByInstanceof.ts] class Match { public range(): any { return undefined; } } class FileMatch { public resource(): any { return undefined; } } type FileMatchOrMatch = FileMatch | Match; let elementA: FileMatchOrMatch, elementB: FileMatchOrMatch; if (elementA instanceof FileMatch && elementB instanceof FileMatch) { let a = elementA.resource().path; let b = elementB.resource().path; } else if (elementA instanceof Match && elementB instanceof Match) { let a = elementA.range(); let b = elementB.range(); } //// [narrowTypeByInstanceof.js] var Match = (function () { function Match() { } Match.prototype.range = function () { return undefined; }; return Match; })(); var FileMatch = (function () { function FileMatch() { } FileMatch.prototype.resource = function () { return undefined; }; return FileMatch; })(); var elementA, elementB; if (elementA instanceof FileMatch && elementB instanceof FileMatch) { var a = elementA.resource().path; var b = elementB.resource().path; } else if (elementA instanceof Match && elementB instanceof Match) { var a = elementA.range(); var b = elementB.range(); }