2014-07-13 01:04:16 +02:00
|
|
|
//// [functionWithMultipleReturnStatements2.ts]
|
|
|
|
// return type of a function with multiple returns is the BCT of each return statement
|
|
|
|
// no errors expected here
|
|
|
|
|
|
|
|
function f1() {
|
|
|
|
if (true) {
|
|
|
|
return 1;
|
|
|
|
} else {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function f2() {
|
|
|
|
if (true) {
|
|
|
|
return 1;
|
|
|
|
} else if (false) {
|
|
|
|
return null;
|
|
|
|
} else {
|
|
|
|
return 2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function f4() {
|
|
|
|
try {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
catch (e) {
|
|
|
|
return undefined;
|
|
|
|
}
|
|
|
|
finally {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function f5() {
|
|
|
|
return 1;
|
|
|
|
return new Object();
|
|
|
|
}
|
|
|
|
|
|
|
|
function f6<T>(x: T) {
|
|
|
|
if (true) {
|
|
|
|
return x;
|
|
|
|
} else {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//function f7<T extends U, U>(x: T, y: U) {
|
|
|
|
// if (true) {
|
|
|
|
// return x;
|
|
|
|
// } else {
|
|
|
|
// return y;
|
|
|
|
// }
|
|
|
|
//}
|
|
|
|
|
|
|
|
var a: { x: number; y?: number };
|
|
|
|
var b: { x: number; z?: number };
|
|
|
|
// returns typeof a
|
|
|
|
function f9() {
|
|
|
|
if (true) {
|
|
|
|
return a;
|
|
|
|
} else {
|
|
|
|
return b;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// returns typeof b
|
|
|
|
function f10() {
|
|
|
|
if (true) {
|
|
|
|
return b;
|
|
|
|
} else {
|
|
|
|
return a;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// returns number => void
|
|
|
|
function f11() {
|
|
|
|
if (true) {
|
|
|
|
return (x: number) => { }
|
|
|
|
} else {
|
|
|
|
return (x: Object) => { }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// returns Object => void
|
|
|
|
function f12() {
|
|
|
|
if (true) {
|
|
|
|
return (x: Object) => { }
|
|
|
|
} else {
|
|
|
|
return (x: number) => { }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//// [functionWithMultipleReturnStatements2.js]
|
2014-08-14 15:21:30 +02:00
|
|
|
// return type of a function with multiple returns is the BCT of each return statement
|
|
|
|
// no errors expected here
|
2014-07-13 01:04:16 +02:00
|
|
|
function f1() {
|
|
|
|
if (true) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function f2() {
|
|
|
|
if (true) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
else if (false) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return 2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function f4() {
|
|
|
|
try {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
catch (e) {
|
|
|
|
return undefined;
|
|
|
|
}
|
|
|
|
finally {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function f5() {
|
|
|
|
return 1;
|
|
|
|
return new Object();
|
|
|
|
}
|
|
|
|
function f6(x) {
|
|
|
|
if (true) {
|
|
|
|
return x;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
2014-08-12 00:54:12 +02:00
|
|
|
//function f7<T extends U, U>(x: T, y: U) {
|
|
|
|
// if (true) {
|
|
|
|
// return x;
|
|
|
|
// } else {
|
|
|
|
// return y;
|
|
|
|
// }
|
|
|
|
//}
|
2014-07-13 01:04:16 +02:00
|
|
|
var a;
|
|
|
|
var b;
|
2014-08-14 15:21:30 +02:00
|
|
|
// returns typeof a
|
2014-07-13 01:04:16 +02:00
|
|
|
function f9() {
|
|
|
|
if (true) {
|
|
|
|
return a;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return b;
|
|
|
|
}
|
|
|
|
}
|
2014-08-14 15:21:30 +02:00
|
|
|
// returns typeof b
|
2014-07-13 01:04:16 +02:00
|
|
|
function f10() {
|
|
|
|
if (true) {
|
|
|
|
return b;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return a;
|
|
|
|
}
|
|
|
|
}
|
2014-08-14 15:21:30 +02:00
|
|
|
// returns number => void
|
2014-07-13 01:04:16 +02:00
|
|
|
function f11() {
|
|
|
|
if (true) {
|
2015-02-07 03:45:09 +01:00
|
|
|
return function (x) { };
|
2014-07-13 01:04:16 +02:00
|
|
|
}
|
|
|
|
else {
|
2015-02-07 03:45:09 +01:00
|
|
|
return function (x) { };
|
2014-07-13 01:04:16 +02:00
|
|
|
}
|
|
|
|
}
|
2014-08-14 15:21:30 +02:00
|
|
|
// returns Object => void
|
2014-07-13 01:04:16 +02:00
|
|
|
function f12() {
|
|
|
|
if (true) {
|
2015-02-07 03:45:09 +01:00
|
|
|
return function (x) { };
|
2014-07-13 01:04:16 +02:00
|
|
|
}
|
|
|
|
else {
|
2015-02-07 03:45:09 +01:00
|
|
|
return function (x) { };
|
2014-07-13 01:04:16 +02:00
|
|
|
}
|
|
|
|
}
|