Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

266
Views
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

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

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"];
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!