typescript - Switch sin break ejecuta código para condiciones falsas
Si entiendo correctamente, la ejecución de la declaración switch para la siguiente firma:
switch (key) {
case value:
break;
default:
break;
}
es como sigue:
si el valor del caso coincide con la clave
- ejecutar código dentro
si se encuentra return o break
- interruptor de salida
Porque TypeScript no se queja cuando omito el break, supuse que una declaración switch funcionaría de manera similar a una declaración if; la ejecución del código dentro de la declaración if ocurriría si la condición era verdadera.
Pero el código de ejemplo a continuación imprimirá los 3 casos si omito los breaks aunque los casos no sean todos verdaderos.
enum SomeEnum {
a = 'a',
b = 'b',
c = 'c',
}
doSomething(SomeEnum.a)
function doSomething(s: SomeEnum) {
switch (s) {
case SomeEnum.a:
console.log(1)
break
case SomeEnum.b:
console.log(2)
break
case SomeEnum.c:
console.log(3)
break
default:
break
}
}
Entonces, creo que estoy malentendiendo algo aquí, pero buscar este problema no arrojó nada. Agradecería si alguien pudiera arrojar algo de luz sobre esto.
Respuesta #1
Una declaración switch ejecuta todo el código desde la primera coincidencia. No verifica los otros casos cuando encuentra una coincidencia. Por ejemplo, si pasas a, registrará 1, 2 y 3. Si pasas b, devolverá 2 y 3. Continuará y solo omitirá el código que va antes de tu coincidencia. El break le indica a tu declaración switch que puede detenerse allí. Funciona de manera similar a un return.
No es realmente como un if-statement, es más como:
if (SomeEnum.a) {
... run this code and all other code after it.
}
if (SomeEnum.b) {
... run this code and all other code after it
}
...
