TypeScript/tests/baselines/reference/typeGuardsInFunction.js
Sheetal Nandi 2fecc132ab Tests for typeguards allowed on variables and parameters only
From spec:
Note that type guards affect types of variables and parameters only and have no effect on members of objects such as properties
2014-11-06 13:04:27 -08:00

166 lines
5.8 KiB
TypeScript

//// [typeGuardsInFunction.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;
var var1: string | number;
// Inside function declaration
function f(param: string | number) {
// global vars in function declaration
num = typeof var1 === "string" && var1.length; // string
// variables in function declaration
var var2: string | number;
num = typeof var2 === "string" && var2.length; // string
// parameters in function declaration
num = typeof param === "string" && param.length; // string
}
// local function declaration
function f1(param: string | number) {
var var2: string | number;
function f2(param1: string | number) {
// global vars in function declaration
num = typeof var1 === "string" && var1.length; // string
// variables from outer function declaration
num = typeof var2 === "string" && var2.length; // string
// parameters in outer declaration
num = typeof param === "string" && param.length; // string
// local
var var3: string | number;
num = typeof var3 === "string" && var3.length; // string
num = typeof param1 === "string" && param1.length; // string
}
}
// Function expression
function f2(param: string | number) {
// variables in function declaration
var var2: string | number;
// variables in function expressions
var r = function (param1: string | number) {
// global vars in function declaration
num = typeof var1 === "string" && var1.length; // string
// variables from outer function declaration
num = typeof var2 === "string" && var2.length; // string
// parameters in outer declaration
num = typeof param === "string" && param.length; // string
// local
var var3: string | number;
num = typeof var3 === "string" && var3.length; // string
num = typeof param1 === "string" && param1.length; // string
} (param);
}
// Arrow expression
function f3(param: string | number) {
// variables in function declaration
var var2: string | number;
// variables in function expressions
var r = ((param1: string | number) => {
// global vars in function declaration
num = typeof var1 === "string" && var1.length; // string
// variables from outer function declaration
num = typeof var2 === "string" && var2.length; // string
// parameters in outer declaration
num = typeof param === "string" && param.length; // string
// local
var var3: string | number;
num = typeof var3 === "string" && var3.length; // string
num = typeof param1 === "string" && param1.length; // string
})(param);
}
// Return type of function
// Inside function declaration
var strOrNum: string | number;
function f4() {
var var2: string | number = strOrNum;
return var2;
}
strOrNum = typeof f4() === "string" && f4(); // string | number
//// [typeGuardsInFunction.js]
// 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;
var var1;
// Inside function declaration
function f(param) {
// global vars in function declaration
num = typeof var1 === "string" && var1.length; // string
// variables in function declaration
var var2;
num = typeof var2 === "string" && var2.length; // string
// parameters in function declaration
num = typeof param === "string" && param.length; // string
}
// local function declaration
function f1(param) {
var var2;
function f2(param1) {
// global vars in function declaration
num = typeof var1 === "string" && var1.length; // string
// variables from outer function declaration
num = typeof var2 === "string" && var2.length; // string
// parameters in outer declaration
num = typeof param === "string" && param.length; // string
// local
var var3;
num = typeof var3 === "string" && var3.length; // string
num = typeof param1 === "string" && param1.length; // string
}
}
// Function expression
function f2(param) {
// variables in function declaration
var var2;
// variables in function expressions
var r = function (param1) {
// global vars in function declaration
num = typeof var1 === "string" && var1.length; // string
// variables from outer function declaration
num = typeof var2 === "string" && var2.length; // string
// parameters in outer declaration
num = typeof param === "string" && param.length; // string
// local
var var3;
num = typeof var3 === "string" && var3.length; // string
num = typeof param1 === "string" && param1.length; // string
}(param);
}
// Arrow expression
function f3(param) {
// variables in function declaration
var var2;
// variables in function expressions
var r = (function (param1) {
// global vars in function declaration
num = typeof var1 === "string" && var1.length; // string
// variables from outer function declaration
num = typeof var2 === "string" && var2.length; // string
// parameters in outer declaration
num = typeof param === "string" && param.length; // string
// local
var var3;
num = typeof var3 === "string" && var3.length; // string
num = typeof param1 === "string" && param1.length; // string
})(param);
}
// Return type of function
// Inside function declaration
var strOrNum;
function f4() {
var var2 = strOrNum;
return var2;
}
strOrNum = typeof f4() === "string" && f4(); // string | number