Búsqueda de sitios web

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
    • de lo contrario, evalúa el siguiente caso
  • de lo contrario, evalúa el siguiente caso

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
}

...

Artículos relacionados