Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

160
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda