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

216
Views
¿Qué significa "como const" en TypeScript y cuál es su caso de uso?

Estoy confundido acerca del elenco as const . Revisé algunos documentos y videos, pero no los entendí completamente.

Mi preocupación es ¿qué significa as const en el siguiente código y cuál es el beneficio de usarlo?

 const args = [8, 5] as const; const angle = Math.atan2(...args); console.log(angle);
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Si tuviera que escribir const args = [8, 5] , nada le impediría escribir también args[0] = 23 o args.push(30) o cualquier otra cosa para modificar esa matriz. Todo lo que ha hecho es decirle a TS/JS que la variable llamada args apunta a esa matriz específica, por lo que no puede cambiar a qué hace referencia (por ejemplo, no puede hacer args = "something else" ). Puede modificar la matriz, simplemente no puede cambiar a qué apunta su variable.

Por otro lado, agregar as const a una declaración ahora realmente la hace constante. Todo es de solo lectura, por lo que no puede modificar la matriz en absoluto.


Para aclarar, como se señala en los comentarios:

"realmente lo hace constante" podría implicar que hay algún efecto de tiempo de ejecución cuando no lo hay. En tiempo de ejecución, args.push(30) seguirá modificando la matriz. Todo lo que hace const es hacer que el compilador de TypeScript se queje si lo ve haciéndolo. – jcalz

as const solo afecta al compilador, y hay una excepción a su efecto de solo lectura (ver los comentarios). Pero en general, esa sigue siendo la principal diferencia de uso entre const y as const . Uno se usa para hacer que una referencia sea inmutable y el otro se usa para hacer que lo que se hace referencia sea inmutable.

over 4 years ago · Santiago Trujillo Report

0

Esa es una afirmación const . Aquí hay una publicación útil sobre ellos , y aquí está la documentación .

Cuando construimos nuevas expresiones literales con aserciones constantes, podemos indicarle al lenguaje que

  • no se deben ampliar los tipos literales en esa expresión (por ejemplo, no pasar de "hola" a cadena)
  • los objetos literales obtienen propiedades de solo lectura
  • los literales de matriz se convierten en tuplas de solo lectura

Con const args = [8, 5] as const; , se aplica la tercera viñeta, y tsc entenderá que significa:

 // Type: readonly [8, 5] const args = [8, 5] as const; // Ok args[0]; args[1]; // Error: Tuple type 'readonly [8, 5]' of length '2' has no element at index '2'. args[2];

Sin la afirmación:

 // Type: number[] const args = [8, 5]; // Ok args[0]; args[1]; // Also Ok. args[2];
over 4 years ago · Santiago Trujillo Report

0

En pocas palabras, le permite crear objetos completamente de solo lectura , esto se conoce como const assertion , en su código as const significa que los valores de las posiciones de la matriz son de readonly , aquí hay un ejemplo de cómo funciona:

 const args = [8, 5] as const; args[0] = 3; // throws "Cannot assign to '0' because it is a read-only args.push(3); // throws "Property 'push' does not exist on type 'readonly [8, 5]'"

Puede ver en el último error lanzado, que args = [8, 5] as const se interpreta como args: readonly [8, 5] , eso es porque la primera declaración es equivalente a una tupla de solo lectura .

Hay algunas excepciones en las que las afirmaciones son "totalmente de solo lectura", puede consultarlas aquí . Sin embargo, el beneficio general es el comportamiento de readonly que se agrega a todos sus atributos de objeto .

 const args = [8, 5]; // Without `as const` assert; `args` stills a constant, but you can modify its attributes args[0] = 3; // -- WORKS args.push(3); // -- WORKS // You are only prevented from assigning values directly to your variable args = 7; // -- THROWS ERROR

Para obtener más detalles, aquí hay una lista de otras preguntas/respuestas relacionadas que me ayudaron a comprender la afirmación const:

  1. ¿Cómo declaro una tupla de matriz de solo lectura en TypeScript?
  2. ¿Alguna diferencia entre las aserciones de tipo y el operador as nuevo en TypeScript?
  3. Tuplas de solo lectura mecanografiadas
over 4 years ago · Santiago Trujillo 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!