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

454
Views
¿Cuál es la diferencia entre estas dos cláusulas de "extensión"?

No puedo entender por qué el tipo de nVal1 se puede inferir en cada posición, mientras que nVal2 no se puede.

ingrese la descripción de la imagen aquí

 function rSelf1<T extends unknown[] | [unknown]>(vs: T): T { return vs; } function rSelf2<T extends unknown[]>(vs: T): T { return vs; } const nVal1 = rSelf1(["a", 1, 2, true]); const nVal2 = rSelf2(["a", 1, 2, true]);

enlace de código: https://codesandbox.io/s/typescript-playground-export-forked-t1d8o?file=/index.ts

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

0

(A whole bunch of idk the answer but here's some digging I did to maybe give you some context and related info)

Esto me desconcierta y me emociona. Esencialmente, me hiciste darme cuenta de que "desconocido[] | [desconocido]" puede usarse para inferir tuplas. Siempre quise hacer esto. Esto parece hacky y no puedo entender cómo funciona. Encontré este tipo ts-essentials para tupla. Luego investigué un poco más y encontré esta respuesta de github que explica cómo funciona . Esto nos ayuda un poco. Ahora sabemos que "desconocido[] | [desconocido]" obliga al compilador a inferir el tipo de tupla. ¿Pero por qué? eso no lo se aun Parece que no puedo encontrar nada que explique este comportamiento.

Mi pensamiento antes de investigar un poco sobre esto. Así que no puedo responder directamente a su pregunta, pero me encontré con esta publicación de stackoverflow relacionada . Puede usar parámetros de descanso para inferir fácilmente tipos de tuplas. Me gusta este método porque parece que es algo que pretendían los creadores del mecanografiado. Pero agrega placa de caldera de tiempo de ejecución y eso no es bueno.

Encontré esta otra forma (solución 2) para hacer esto, pero aún no es una solución completamente adecuada. Con este, requiere que el usuario de la función haga "como const" en la matriz.

 // solution 1 function tuple<T extends unknown[]>(...v: T) { return v; } function rSelf3<T>(vs: T): T { return vs; } const nVal3 = rSelf3(tuple("a", 1, true)); // solution 2 type Writable<T> = { -readonly [P in keyof T]: T[P] }; function rSelf4<T extends readonly unknown[]>(vs: T): Writable<T> { return vs; } const nVal4 = rSelf4(["a", 1, true] as const);
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!