• Empleos
  • Sobre nosotros
  • Empleos
    • Inicio
    • Empleos
    • Cursos y retos
  • Empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Contrata talento tech
    • Blog
    • Comercial
    • Calculadora de salario

0

250
Vistas
El literal de la plantilla arroja errores en algunos escenarios pero no en otros

Como parte de una revisión de código, un colega recomendó usar un tipo en lugar de una enumeración. Mientras hacíamos los cambios, encontramos un problema que ninguno de nosotros esperábamos.

Esperaríamos que el escenario uno y dos arrojaran errores de compilación y/o intellisense ya que uno de los valores no existe en el tipo. Sin embargo, después de la prueba, encontramos que solo el escenario uno genera errores, mientras que el escenario dos se resuelve sin problemas.

Es probable que se trate de un problema de comprensión, pero por todo lo que he leído (por ejemplo, tipos de literales de plantilla , deberíamos recibir errores cuando un valor proporcionado no existe).

Según lo anterior, ¿alguien puede explicar por qué solo vemos errores en el escenario uno pero no en el escenario dos?

Escenario uno

Código de ejemplo

 export type FileType = ".png" | ".tif" | ".tiff" | ".jpeg" | ".jpg"; const allowedFileTypes = [".exe"] as Array<FileType>;

Expectativa: error del compilador porque .exe no existe

Resultado: error del compilador que indica que el valor no existe

Escenario dos

Código de ejemplo

 export type FileType = ".png" | ".tif" | ".tiff" | ".jpeg" | ".jpg"; const allowedFileTypes = [".exe", ".jpeg"] as Array<FileType>;

Expectativa: error del compilador porque .exe no existe

Resultado: no hay errores del compilador

Escenario tres

Código de ejemplo

 export type FileType = ".png" | ".tif" | ".tiff" | ".jpeg" | ".jpg"; const allowedFileTypes = [".png", ".jpeg"] as Array<FileType>;

Expectativa: No hay errores del compilador

Resultado: no hay errores del compilador

almost 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

as Type es una forma de decir "Este valor es este tipo, incluso si no lo parece".

Está anulando la detección de tipo normal.

Es útil para cosas como:

 const response = await fetch('/some/url'); const data = await response.json(); return data as Foo;

donde sabe cuál es la forma de los datos que está recibiendo de la solicitud HTTP, pero el compilador no tiene forma de saberlo a menos que use as para decirlo explícitamente.


Es peligroso ya que puede especificar un tipo que no coincida con el valor que realmente tiene (como descubrió).

Tengo un proyecto en marcha en el que estoy usando superstruct para probar la forma de mis datos dentro de una función typeguard en lugar de confiar en as .


En su lugar, debe especificar qué se permite asignar a la variable:

 const allowedFileTypes: Array<FileType> = [".exe", ".jpeg"];
almost 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda