=== tests/cases/conformance/expressions/typeGuards/typeGuardsInModule.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(typeGuardsInModule.ts, 4, 3)) var strOrNum: string | number; >strOrNum : string | number, Symbol(strOrNum, Decl(typeGuardsInModule.ts, 5, 3)) var var1: string | number; >var1 : string | number, Symbol(var1, Decl(typeGuardsInModule.ts, 6, 3)) // Inside module module m1 { >m1 : typeof m1, Symbol(m1, Decl(typeGuardsInModule.ts, 6, 26)) // global vars in function declaration num = typeof var1 === "string" && var1.length; // string >num = typeof var1 === "string" && var1.length : number >num : number, Symbol(num, Decl(typeGuardsInModule.ts, 4, 3)) >typeof var1 === "string" && var1.length : number >typeof var1 === "string" : boolean >typeof var1 : string >var1 : string | number, Symbol(var1, Decl(typeGuardsInModule.ts, 6, 3)) >"string" : string >var1.length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >var1 : string, Symbol(var1, Decl(typeGuardsInModule.ts, 6, 3)) >length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) // variables in module declaration var var2: string | number; >var2 : string | number, Symbol(var2, Decl(typeGuardsInModule.ts, 13, 7)) if (typeof var2 === "string") { >typeof var2 === "string" : boolean >typeof var2 : string >var2 : string | number, Symbol(var2, Decl(typeGuardsInModule.ts, 13, 7)) >"string" : string num = var2.length; // string >num = var2.length : number >num : number, Symbol(num, Decl(typeGuardsInModule.ts, 4, 3)) >var2.length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >var2 : string, Symbol(var2, Decl(typeGuardsInModule.ts, 13, 7)) >length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) } else { num = var2; // number >num = var2 : number >num : number, Symbol(num, Decl(typeGuardsInModule.ts, 4, 3)) >var2 : number, Symbol(var2, Decl(typeGuardsInModule.ts, 13, 7)) } // exported variable in the module export var var3: string | number; >var3 : string | number, Symbol(var3, Decl(typeGuardsInModule.ts, 22, 14)) if (typeof var3 === "string") { >typeof var3 === "string" : boolean >typeof var3 : string >var3 : string | number, Symbol(var3, Decl(typeGuardsInModule.ts, 22, 14)) >"string" : string strOrNum = var3; // string | number >strOrNum = var3 : string | number >strOrNum : string | number, Symbol(strOrNum, Decl(typeGuardsInModule.ts, 5, 3)) >var3 : string | number, Symbol(var3, Decl(typeGuardsInModule.ts, 22, 14)) } else { strOrNum = var3; // string | number >strOrNum = var3 : string | number >strOrNum : string | number, Symbol(strOrNum, Decl(typeGuardsInModule.ts, 5, 3)) >var3 : string | number, Symbol(var3, Decl(typeGuardsInModule.ts, 22, 14)) } } // local module module m2 { >m2 : typeof m2, Symbol(m2, Decl(typeGuardsInModule.ts, 29, 1)) var var2: string | number; >var2 : string | number, Symbol(var2, Decl(typeGuardsInModule.ts, 32, 7)) export var var3: string | number; >var3 : string | number, Symbol(var3, Decl(typeGuardsInModule.ts, 33, 14)) module m3 { >m3 : typeof m3, Symbol(m3, Decl(typeGuardsInModule.ts, 33, 37)) // global vars in function declaration num = typeof var1 === "string" && var1.length; // string >num = typeof var1 === "string" && var1.length : number >num : number, Symbol(num, Decl(typeGuardsInModule.ts, 4, 3)) >typeof var1 === "string" && var1.length : number >typeof var1 === "string" : boolean >typeof var1 : string >var1 : string | number, Symbol(var1, Decl(typeGuardsInModule.ts, 6, 3)) >"string" : string >var1.length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >var1 : string, Symbol(var1, Decl(typeGuardsInModule.ts, 6, 3)) >length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) // local variables from outer module declaration num = typeof var2 === "string" && var2.length; // string >num = typeof var2 === "string" && var2.length : number >num : number, Symbol(num, Decl(typeGuardsInModule.ts, 4, 3)) >typeof var2 === "string" && var2.length : number >typeof var2 === "string" : boolean >typeof var2 : string >var2 : string | number, Symbol(var2, Decl(typeGuardsInModule.ts, 32, 7)) >"string" : string >var2.length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >var2 : string, Symbol(var2, Decl(typeGuardsInModule.ts, 32, 7)) >length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) // exported variable from outer the module strOrNum = typeof var3 === "string" && var3; // string | number >strOrNum = typeof var3 === "string" && var3 : string | number >strOrNum : string | number, Symbol(strOrNum, Decl(typeGuardsInModule.ts, 5, 3)) >typeof var3 === "string" && var3 : string | number >typeof var3 === "string" : boolean >typeof var3 : string >var3 : string | number, Symbol(var3, Decl(typeGuardsInModule.ts, 33, 14)) >"string" : string >var3 : string | number, Symbol(var3, Decl(typeGuardsInModule.ts, 33, 14)) // variables in module declaration var var4: string | number; >var4 : string | number, Symbol(var4, Decl(typeGuardsInModule.ts, 45, 11)) if (typeof var4 === "string") { >typeof var4 === "string" : boolean >typeof var4 : string >var4 : string | number, Symbol(var4, Decl(typeGuardsInModule.ts, 45, 11)) >"string" : string num = var4.length; // string >num = var4.length : number >num : number, Symbol(num, Decl(typeGuardsInModule.ts, 4, 3)) >var4.length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >var4 : string, Symbol(var4, Decl(typeGuardsInModule.ts, 45, 11)) >length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) } else { num = var4; // number >num = var4 : number >num : number, Symbol(num, Decl(typeGuardsInModule.ts, 4, 3)) >var4 : number, Symbol(var4, Decl(typeGuardsInModule.ts, 45, 11)) } // exported variable in the module export var var5: string | number; >var5 : string | number, Symbol(var5, Decl(typeGuardsInModule.ts, 54, 18)) if (typeof var5 === "string") { >typeof var5 === "string" : boolean >typeof var5 : string >var5 : string | number, Symbol(var5, Decl(typeGuardsInModule.ts, 54, 18)) >"string" : string strOrNum = var5; // string | number >strOrNum = var5 : string | number >strOrNum : string | number, Symbol(strOrNum, Decl(typeGuardsInModule.ts, 5, 3)) >var5 : string | number, Symbol(var5, Decl(typeGuardsInModule.ts, 54, 18)) } else { strOrNum = var5; // string | number >strOrNum = var5 : string | number >strOrNum : string | number, Symbol(strOrNum, Decl(typeGuardsInModule.ts, 5, 3)) >var5 : string | number, Symbol(var5, Decl(typeGuardsInModule.ts, 54, 18)) } } } // Dotted module module m3.m4 { >m3 : typeof m3, Symbol(m3, Decl(typeGuardsInModule.ts, 62, 1)) >m4 : typeof m4, Symbol(m4, Decl(typeGuardsInModule.ts, 64, 10)) // global vars in function declaration num = typeof var1 === "string" && var1.length; // string >num = typeof var1 === "string" && var1.length : number >num : number, Symbol(num, Decl(typeGuardsInModule.ts, 4, 3)) >typeof var1 === "string" && var1.length : number >typeof var1 === "string" : boolean >typeof var1 : string >var1 : string | number, Symbol(var1, Decl(typeGuardsInModule.ts, 6, 3)) >"string" : string >var1.length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >var1 : string, Symbol(var1, Decl(typeGuardsInModule.ts, 6, 3)) >length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) // variables in module declaration var var2: string | number; >var2 : string | number, Symbol(var2, Decl(typeGuardsInModule.ts, 69, 7)) if (typeof var2 === "string") { >typeof var2 === "string" : boolean >typeof var2 : string >var2 : string | number, Symbol(var2, Decl(typeGuardsInModule.ts, 69, 7)) >"string" : string num = var2.length; // string >num = var2.length : number >num : number, Symbol(num, Decl(typeGuardsInModule.ts, 4, 3)) >var2.length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) >var2 : string, Symbol(var2, Decl(typeGuardsInModule.ts, 69, 7)) >length : number, Symbol(String.length, Decl(lib.d.ts, 414, 19)) } else { num = var2; // number >num = var2 : number >num : number, Symbol(num, Decl(typeGuardsInModule.ts, 4, 3)) >var2 : number, Symbol(var2, Decl(typeGuardsInModule.ts, 69, 7)) } // exported variable in the module export var var3: string | number; >var3 : string | number, Symbol(var3, Decl(typeGuardsInModule.ts, 78, 14)) if (typeof var3 === "string") { >typeof var3 === "string" : boolean >typeof var3 : string >var3 : string | number, Symbol(var3, Decl(typeGuardsInModule.ts, 78, 14)) >"string" : string strOrNum = var3; // string | number >strOrNum = var3 : string | number >strOrNum : string | number, Symbol(strOrNum, Decl(typeGuardsInModule.ts, 5, 3)) >var3 : string | number, Symbol(var3, Decl(typeGuardsInModule.ts, 78, 14)) } else { strOrNum = var3; // string | number >strOrNum = var3 : string | number >strOrNum : string | number, Symbol(strOrNum, Decl(typeGuardsInModule.ts, 5, 3)) >var3 : string | number, Symbol(var3, Decl(typeGuardsInModule.ts, 78, 14)) } }