=== tests/cases/conformance/expressions/typeGuards/typeGuardsInClassMethods.ts === // Note that type guards affect types of variables and parameters only and // have no effect on members of objects such as properties. // variables in global var num: number; >num : number, Symbol(num, Decl(typeGuardsInClassMethods.ts, 4, 3)) var var1: string | number; >var1 : string | number, Symbol(var1, Decl(typeGuardsInClassMethods.ts, 5, 3)) class C1 { >C1 : C1, Symbol(C1, Decl(typeGuardsInClassMethods.ts, 5, 26)) constructor(param: string | number) { >param : string | number, Symbol(param, Decl(typeGuardsInClassMethods.ts, 7, 16)) // global vars in function declaration num = typeof var1 === "string" && var1.length; // string >num = typeof var1 === "string" && var1.length : number >num : number, Symbol(num, Decl(typeGuardsInClassMethods.ts, 4, 3)) >typeof var1 === "string" && var1.length : number >typeof var1 === "string" : boolean >typeof var1 : string >var1 : string | number, Symbol(var1, Decl(typeGuardsInClassMethods.ts, 5, 3)) >"string" : string >var1.length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >var1 : string, Symbol(var1, Decl(typeGuardsInClassMethods.ts, 5, 3)) >length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) // variables in function declaration var var2: string | number; >var2 : string | number, Symbol(var2, Decl(typeGuardsInClassMethods.ts, 12, 11)) num = typeof var2 === "string" && var2.length; // string >num = typeof var2 === "string" && var2.length : number >num : number, Symbol(num, Decl(typeGuardsInClassMethods.ts, 4, 3)) >typeof var2 === "string" && var2.length : number >typeof var2 === "string" : boolean >typeof var2 : string >var2 : string | number, Symbol(var2, Decl(typeGuardsInClassMethods.ts, 12, 11)) >"string" : string >var2.length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >var2 : string, Symbol(var2, Decl(typeGuardsInClassMethods.ts, 12, 11)) >length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) // parameters in function declaration num = typeof param === "string" && param.length; // string >num = typeof param === "string" && param.length : number >num : number, Symbol(num, Decl(typeGuardsInClassMethods.ts, 4, 3)) >typeof param === "string" && param.length : number >typeof param === "string" : boolean >typeof param : string >param : string | number, Symbol(param, Decl(typeGuardsInClassMethods.ts, 7, 16)) >"string" : string >param.length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >param : string, Symbol(param, Decl(typeGuardsInClassMethods.ts, 7, 16)) >length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) } // Inside function declaration private p1(param: string | number) { >p1 : (param: string | number) => void, Symbol(p1, Decl(typeGuardsInClassMethods.ts, 17, 5)) >param : string | number, Symbol(param, Decl(typeGuardsInClassMethods.ts, 19, 15)) // global vars in function declaration num = typeof var1 === "string" && var1.length; // string >num = typeof var1 === "string" && var1.length : number >num : number, Symbol(num, Decl(typeGuardsInClassMethods.ts, 4, 3)) >typeof var1 === "string" && var1.length : number >typeof var1 === "string" : boolean >typeof var1 : string >var1 : string | number, Symbol(var1, Decl(typeGuardsInClassMethods.ts, 5, 3)) >"string" : string >var1.length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >var1 : string, Symbol(var1, Decl(typeGuardsInClassMethods.ts, 5, 3)) >length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) // variables in function declaration var var2: string | number; >var2 : string | number, Symbol(var2, Decl(typeGuardsInClassMethods.ts, 24, 11)) num = typeof var2 === "string" && var2.length; // string >num = typeof var2 === "string" && var2.length : number >num : number, Symbol(num, Decl(typeGuardsInClassMethods.ts, 4, 3)) >typeof var2 === "string" && var2.length : number >typeof var2 === "string" : boolean >typeof var2 : string >var2 : string | number, Symbol(var2, Decl(typeGuardsInClassMethods.ts, 24, 11)) >"string" : string >var2.length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >var2 : string, Symbol(var2, Decl(typeGuardsInClassMethods.ts, 24, 11)) >length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) // parameters in function declaration num = typeof param === "string" && param.length; // string >num = typeof param === "string" && param.length : number >num : number, Symbol(num, Decl(typeGuardsInClassMethods.ts, 4, 3)) >typeof param === "string" && param.length : number >typeof param === "string" : boolean >typeof param : string >param : string | number, Symbol(param, Decl(typeGuardsInClassMethods.ts, 19, 15)) >"string" : string >param.length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >param : string, Symbol(param, Decl(typeGuardsInClassMethods.ts, 19, 15)) >length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) } // Inside function declaration p2(param: string | number) { >p2 : (param: string | number) => void, Symbol(p2, Decl(typeGuardsInClassMethods.ts, 29, 5)) >param : string | number, Symbol(param, Decl(typeGuardsInClassMethods.ts, 31, 7)) // global vars in function declaration num = typeof var1 === "string" && var1.length; // string >num = typeof var1 === "string" && var1.length : number >num : number, Symbol(num, Decl(typeGuardsInClassMethods.ts, 4, 3)) >typeof var1 === "string" && var1.length : number >typeof var1 === "string" : boolean >typeof var1 : string >var1 : string | number, Symbol(var1, Decl(typeGuardsInClassMethods.ts, 5, 3)) >"string" : string >var1.length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >var1 : string, Symbol(var1, Decl(typeGuardsInClassMethods.ts, 5, 3)) >length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) // variables in function declaration var var2: string | number; >var2 : string | number, Symbol(var2, Decl(typeGuardsInClassMethods.ts, 36, 11)) num = typeof var2 === "string" && var2.length; // string >num = typeof var2 === "string" && var2.length : number >num : number, Symbol(num, Decl(typeGuardsInClassMethods.ts, 4, 3)) >typeof var2 === "string" && var2.length : number >typeof var2 === "string" : boolean >typeof var2 : string >var2 : string | number, Symbol(var2, Decl(typeGuardsInClassMethods.ts, 36, 11)) >"string" : string >var2.length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >var2 : string, Symbol(var2, Decl(typeGuardsInClassMethods.ts, 36, 11)) >length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) // parameters in function declaration num = typeof param === "string" && param.length; // string >num = typeof param === "string" && param.length : number >num : number, Symbol(num, Decl(typeGuardsInClassMethods.ts, 4, 3)) >typeof param === "string" && param.length : number >typeof param === "string" : boolean >typeof param : string >param : string | number, Symbol(param, Decl(typeGuardsInClassMethods.ts, 31, 7)) >"string" : string >param.length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >param : string, Symbol(param, Decl(typeGuardsInClassMethods.ts, 31, 7)) >length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) } // Inside function declaration private static s1(param: string | number) { >s1 : (param: string | number) => void, Symbol(C1.s1, Decl(typeGuardsInClassMethods.ts, 41, 5)) >param : string | number, Symbol(param, Decl(typeGuardsInClassMethods.ts, 43, 22)) // global vars in function declaration num = typeof var1 === "string" && var1.length; // string >num = typeof var1 === "string" && var1.length : number >num : number, Symbol(num, Decl(typeGuardsInClassMethods.ts, 4, 3)) >typeof var1 === "string" && var1.length : number >typeof var1 === "string" : boolean >typeof var1 : string >var1 : string | number, Symbol(var1, Decl(typeGuardsInClassMethods.ts, 5, 3)) >"string" : string >var1.length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >var1 : string, Symbol(var1, Decl(typeGuardsInClassMethods.ts, 5, 3)) >length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) // variables in function declaration var var2: string | number; >var2 : string | number, Symbol(var2, Decl(typeGuardsInClassMethods.ts, 48, 11)) num = typeof var2 === "string" && var2.length; // string >num = typeof var2 === "string" && var2.length : number >num : number, Symbol(num, Decl(typeGuardsInClassMethods.ts, 4, 3)) >typeof var2 === "string" && var2.length : number >typeof var2 === "string" : boolean >typeof var2 : string >var2 : string | number, Symbol(var2, Decl(typeGuardsInClassMethods.ts, 48, 11)) >"string" : string >var2.length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >var2 : string, Symbol(var2, Decl(typeGuardsInClassMethods.ts, 48, 11)) >length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) // parameters in function declaration num = typeof param === "string" && param.length; // string >num = typeof param === "string" && param.length : number >num : number, Symbol(num, Decl(typeGuardsInClassMethods.ts, 4, 3)) >typeof param === "string" && param.length : number >typeof param === "string" : boolean >typeof param : string >param : string | number, Symbol(param, Decl(typeGuardsInClassMethods.ts, 43, 22)) >"string" : string >param.length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >param : string, Symbol(param, Decl(typeGuardsInClassMethods.ts, 43, 22)) >length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) } // Inside function declaration static s2(param: string | number) { >s2 : (param: string | number) => void, Symbol(C1.s2, Decl(typeGuardsInClassMethods.ts, 53, 5)) >param : string | number, Symbol(param, Decl(typeGuardsInClassMethods.ts, 55, 14)) // global vars in function declaration num = typeof var1 === "string" && var1.length; // string >num = typeof var1 === "string" && var1.length : number >num : number, Symbol(num, Decl(typeGuardsInClassMethods.ts, 4, 3)) >typeof var1 === "string" && var1.length : number >typeof var1 === "string" : boolean >typeof var1 : string >var1 : string | number, Symbol(var1, Decl(typeGuardsInClassMethods.ts, 5, 3)) >"string" : string >var1.length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >var1 : string, Symbol(var1, Decl(typeGuardsInClassMethods.ts, 5, 3)) >length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) // variables in function declaration var var2: string | number; >var2 : string | number, Symbol(var2, Decl(typeGuardsInClassMethods.ts, 60, 11)) num = typeof var2 === "string" && var2.length; // string >num = typeof var2 === "string" && var2.length : number >num : number, Symbol(num, Decl(typeGuardsInClassMethods.ts, 4, 3)) >typeof var2 === "string" && var2.length : number >typeof var2 === "string" : boolean >typeof var2 : string >var2 : string | number, Symbol(var2, Decl(typeGuardsInClassMethods.ts, 60, 11)) >"string" : string >var2.length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >var2 : string, Symbol(var2, Decl(typeGuardsInClassMethods.ts, 60, 11)) >length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) // parameters in function declaration num = typeof param === "string" && param.length; // string >num = typeof param === "string" && param.length : number >num : number, Symbol(num, Decl(typeGuardsInClassMethods.ts, 4, 3)) >typeof param === "string" && param.length : number >typeof param === "string" : boolean >typeof param : string >param : string | number, Symbol(param, Decl(typeGuardsInClassMethods.ts, 55, 14)) >"string" : string >param.length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >param : string, Symbol(param, Decl(typeGuardsInClassMethods.ts, 55, 14)) >length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) } }