37 lines
786 B
JavaScript
37 lines
786 B
JavaScript
![]() |
function block_scope(x: string | number) {
|
||
|
{
|
||
|
let x;
|
||
|
x = ""; // doesn't refine outer x
|
||
|
}
|
||
|
(x : string); // error: number ~> string
|
||
|
}
|
||
|
|
||
|
function switch_scope(x: string | number) {
|
||
|
switch (x) {
|
||
|
default:
|
||
|
let x;
|
||
|
x = ""; // doesn't refine outer x
|
||
|
}
|
||
|
(x : string); // error: number ~> string
|
||
|
}
|
||
|
|
||
|
function try_scope(x: string | number) {
|
||
|
try {
|
||
|
let x;
|
||
|
x = ""; // doesn't refine outer x
|
||
|
} catch (e) {
|
||
|
x = ""; // refinement would only escape if both sides refined
|
||
|
}
|
||
|
(x : string); // error: number ~> string
|
||
|
}
|
||
|
|
||
|
function try_scope_catch(x: string | number) {
|
||
|
try {
|
||
|
x = ""; // refinement would only escape if both sides refined
|
||
|
} catch (e) {
|
||
|
let x;
|
||
|
x = ""; // doesn't refine outer x
|
||
|
}
|
||
|
(x : string); // error: number ~> string
|
||
|
}
|