π Search Terms
π Version & Regression Information
This is not a regression, it never worked.
β― Playground Link
https://www.typescriptlang.org/play?ts=5.2.2#code/JYOwLgpgTgZghgYwgAgEJwM4oN4ChnJgCeADhAFzIDkMA9rVcgD7UBGcUVuAvrrqJFiIUAMXrIIAD0ggAJhjSYc+QqQrU6DANwrNlDGCigA5jt79w0eEkVQJ0iHIXosyPAWJlKVdpx0FfShAAVwBbVmgzPhhgkAQwYFoQZGMIMAA1AAoASkoxWmZbNxUCKDTgqGSQgBtqgEIo3AQkg2QAN2QAXhS0rOydfhhMzLaAOk8IbK7O7p8OKin3dvG1Hj5cAHoN5AB1WigAawxcDAB3YDAEAAtkEZWyReQt5AAeGc6VBCU2efIS5d8-gIyFYZTgBwGBC+rho9Cof2By00QICYIha022wAIrQIAoQLQwMhTvsDidzpcbsMxhNso9nm8Zp9vnNOAjgWNAf9QRBwZDkNCULCGOyCGNkdy0WYgA
π» Code
interface Base {
type: 'foo' | 'bar'
}
interface Foo extends Base {
type: 'foo';
foo: string;
}
interface Bar extends Base {
type: 'bar';
bar: number;
}
function getV(): Foo | Bar {
return null!;
}
const v = getV();
if((v.type) === 'bar') {
v.type
}
// Works
switch (v.type) { // <===
case 'bar':
v.bar;
break;
case 'foo':
v.foo;
break;
}
// Does not work
switch ((v.type)) { // <===
case 'bar':
v.bar; // KO
break;
case 'foo':
v.foo; // KO
break;
}
π Actual behavior
With extra braces in the switch, narrowing is broken.
switch ((v.type)) { // <=== extra braces
case 'bar':
console.log(v.bar);
break;
case 'foo':
console.log(v.foo);
break;
}
π Expected behavior
switch ((v.type)) should behave as switch (v.type).
There is no such issue on a if condition.
π Search Terms
π Version & Regression Information
This is not a regression, it never worked.
β― Playground Link
https://www.typescriptlang.org/play?ts=5.2.2#code/JYOwLgpgTgZghgYwgAgEJwM4oN4ChnJgCeADhAFzIDkMA9rVcgD7UBGcUVuAvrrqJFiIUAMXrIIAD0ggAJhjSYc+QqQrU6DANwrNlDGCigA5jt79w0eEkVQJ0iHIXosyPAWJlKVdpx0FfShAAVwBbVmgzPhhgkAQwYFoQZGMIMAA1AAoASkoxWmZbNxUCKDTgqGSQgBtqgEIo3AQkg2QAN2QAXhS0rOydfhhMzLaAOk8IbK7O7p8OKin3dvG1Hj5cAHoN5AB1WigAawxcDAB3YDAEAAtkEZWyReQt5AAeGc6VBCU2efIS5d8-gIyFYZTgBwGBC+rho9Cof2By00QICYIha022wAIrQIAoQLQwMhTvsDidzpcbsMxhNso9nm8Zp9vnNOAjgWNAf9QRBwZDkNCULCGOyCGNkdy0WYgA
π» Code
π Actual behavior
With extra braces in the
switch, narrowing is broken.π Expected behavior
switch ((v.type))should behave asswitch (v.type).There is no such issue on a
ifcondition.