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

153
Views
¿Cómo defino un tipo de mecanografiado con una estructura repetitiva?

Tengo un tipo que se parece a esto:

 type Location=`${number},${number};${number},${number};...`

¿Hay algún tipo de utilidad como Repeat<T> que pueda hacer esto por mí? Me gusta esto:

 type Location=Repeat<`${number},${number};`>
over 4 years ago · Santiago Trujillo
4 answers
Answer question

0

Puede elegir directamente el tipo string si lo desea como:

 type myLocation = string; const myLocation: myLocation = "123123123"; console.log(myLocation);

de lo contrario, si desea reducirlo, es mejor declararlo const como:

 const myLocation = "123123123"; console.log(myLocation);

entonces su tipo será el valor de myLocation

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Report

0

No creo que haya una manera de definir un patrón repetido infinito para un tipo que usa en la declaración de variables.

Sin embargo, un tipo de protección en una función puede verificar que una cadena coincida con un patrón infinito, así (patio de recreo ):

 type MatchesPattern<Pattern extends string, Current extends string> = Current extends `` ? string : (Current extends `${Pattern}${infer Rest}` ? MatchesPattern<Pattern, Rest> : never); type LocationPattern = `${number},${number};`; declare function onlyAcceptsLocation<L extends string & IsLocation, IsLocation = MatchesPattern<LocationPattern, L>>(location: L): void; onlyAcceptsLocation("12,34;56,78;"); // 👍 matches onlyAcceptsLocation("12,34;56,78"); // ⚠️ onlyAcceptsLocation("12'34;56,78;"); // ⚠️ onlyAcceptsLocation("1,2,3;45,67;"); // ⚠️
over 4 years ago · Santiago Trujillo Report

0

Puede usar una aserción as const para obtener un tipo de literal de cadena de un literal de plantilla, como este:

Parque infantil TS

 const str1 = 'str1'; const str2 = `${str1},${str1};${str1},${str1}` as const; // type is "str1,str1;str1,str1"
over 4 years ago · Santiago Trujillo Report

0

SOLO FUNCIONA EN TS >=4.5

Es posible crear un tipo independiente.

Por favor vea este ejemplo:

 type Coordinates = `${number},${number};` type MAXIMUM_ALLOWED_BOUNDARY = 50 type Last<T extends string[]> = T extends [...infer _, infer Last] ? Last : never; type ConcatPrevious<T extends any[]> = Last<T> extends string ? `${Last<T>}${Coordinates}` : never type Mapped< N extends number, Result extends Array<unknown> = [Coordinates], > = (Result['length'] extends N ? Result : Mapped<N, [...Result, ConcatPrevious<Result>]> ) // type MyLocation = // | `${number},${number};` // | `${number},${number};${number},${number};` // | `${number},${number};${number},${number};${number},${number};` // | `${number},${number};${number},${number};${number},${number};${number},${number};` // | `${number},${number};${number},${number};${number},${number};${number},${number};${number},${number};` // | ... 44 more ... // | `${number},${number};${number},${number};${number},${number};${number},${number};${number},${number};${number},${number}; .... type MyLocation = Mapped<MAXIMUM_ALLOWED_BOUNDARY>[number] const myLocation1: MyLocation = '45,56;67,68;' // ok const myLocation2: MyLocation = '45,56;67,68;1,2;3,4;5,6;7,8;9,10;' // ok const myLocation3: MyLocation = '45,56;67,68;1,2;3,4;5,6;7,8;9,10,' // expected error

Patio de recreo

Mapped son un tipo de utilidad que representa un ciclo while . Itera hasta que la longitud de Result alcance N . En otras palabras, Mapped<10> - iterará 10 veces. Vea este ejemplo en js puro:

 const mapped = (N: number, Result: any[] = []): string => { if (N === Result.length) { return Result.join('') } const x = Math.random(); const y = Math.random() return mapped(N, [...Result, `${x},${y};`]) }

Es difícil representar uniones en js, por eso he usado join('') . Espero que quede claro cómo funciona.

Si desea aumentar MAXIMUM_ALLOWED_BOUNDARY a 500, calentará su CPU, así que tenga cuidado.

Como habrás notado, es imposible representar un patrón recursivo para el tipo en el script de tipo, pero es posible crear una unión lo suficientemente grande.

Tenga en cuenta que existen algunos inconvenientes del tipo ${number} . Se le permite usar números con ceros a la izquierda como aquí:

 const x: `${number}` = '01'.

Enlaces útiles :

  1. Aquí puede encontrar un ejemplo de cómo puede crear un rango de números usando este patrón.

  2. Aquí puede encontrar un PR donde se introdujo esta característica

  3. Aquí y aquí puedes encontrar mis artículos relacionados con este patrón.

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!