TypeScript/tests/cases/compiler/controlFlowLoopAnalysis.ts

52 lines
1 KiB
TypeScript
Raw Normal View History

2016-05-02 20:17:10 +02:00
// @strictNullChecks: true
2016-05-11 22:03:47 +02:00
// @noImplicitAny: true
2016-05-02 20:17:10 +02:00
// Repro from #8418
let cond: boolean;
function foo(x: number): number { return 1; }
function test1() {
let x: number | undefined;
while (cond) {
while (cond) {
while (cond) {
x = foo(x);
}
}
x = 1;
}
}
// Repro from #8418
function test2() {
let x: number | undefined;
x = 1;
while (cond) {
while (cond) {
x = foo(x);
}
}
}
2016-05-11 22:03:47 +02:00
// Repro from #8511
function mapUntilCant<a, b>(
values: a[],
canTake: (value: a, index: number) => boolean,
mapping: (value: a, index: number) => b
): b[] {
let result: b[] = [];
for (let index = 0, length = values.length; index < length; index++) {
let value = values[index];
if (canTake(value, index)) {
result.push(mapping(value, index));
} else {
return result;
}
}
return result;
}