1
thayto2 min de leitura · 5 meses atrás

ūüí° TypeScript - Template Literal Types | Explicando com baixa qualidade e da pior forma poss√≠vel (escrito em 10 minutos ou menos)

imagem te chamando de burro se você ainda não conhece o template literal types

Template Literal Types é um bglh insano que expande as possibilidades do que já era possível com o string literals + unions do TS, dá uma olhada!

Ele tem a mesma sintaxe do template literal string do JavaScript.

type Tchau = "tchau!"

type Salve = `Oi ${Tchau}`

com ele é possivel usar sua necessidade + imaginação pra fazer diversas coisas bacanas que vão agregar muito no seu projeto/type.

um exemplo bacana seria padronizar que todas as propriedades extras que adicionarmos à um type, necessitem de ter o prefixo data_ e o suffixo _prop, assim conseguimos criar um objeto com um padrão que vai facilitar o consumo de leitura para sabermos quais as propriedades extras que foram enviadas.

falar é fácil, mas cadê o exemplo? vamos começar criando um type EventData, ele é a nossa base para nosso objeto evento de evento.

type EventData = {
  id: string
  name: string
  step: 'first_step' | 'second_step'
}

ele já possui propriedades definidas, que não podem ser alteradas, mas agora precisamos enviar mais alguns campos relacionados aos fields que ele tem em cada step, poderiamos extender o type EventData e adicionar os campos, mas ao invés disso, bora usar o Template Literal Types!

type FormFields = {
  name: string
  age: number
}

type EventDataExtraProps<T> = `field_${string & keyof T}`
// aqui vamos modificar um pouco o EventData
type EventData<T> = {
  id: string
  name: string
  step: 'first_step' | 'second_step'
} & Record<EventDataExtraProps<T>, any>

const event: EventData<FormFields> = {
  id: 'sextou?',
  name: 'thayto',
  step: 'first_step',
  field_name: 'full_name',
  field_age: 22
}

parece complexo, mas √© bem simples, em projetos grandes / libs, com um √ļnico utilit√°rio desses, conseguimos fazer m√°gica nos auto_completes e na padroniza√ß√£o do envio de determinadas propriedades!

espero que tenha aprendido algo, se não aprendeu, pelo menos leu até o final, tmj!

Meus links: https://thayto.com/linktree

2

Olá caso você não tenha entendido, eu refiz a explicação para talvez você entender um pouco melhor!

Vou explicar o que são os Template Literal Types de uma forma bem simples para você entender.

Sabe quando a gente cria uma frase usando aspas? Por exemplo: "Oi, tudo bem?" Isso é uma string. Agora, com os Template Literal Types, podemos fazer coisas legais com essas frases.

Vou te mostrar um exemplo: temos duas palavras, "tchau!" e "Oi". Com os Template Literal Types, podemos juntar essas palavras para criar uma nova frase. Olha só como fica:

type Tchau = "tchau!"
type Salve = `Oi ${Tchau}

Agora a gente pode usar a palavra "Salve" e ela vai ser uma frase que combina "Oi" com "tchau!". Legal, né?

E tem mais! Podemos usar a nossa imaginação para criar coisas bem legais. Por exemplo, podemos criar um tipo que vai ajudar a padronizar as propriedades de um objeto. Vamos dizer que todas as propriedades extras que a gente adicionar no objeto precisam começar com "data_" e terminar com "_prop". Assim fica mais fácil de ler o código.

Vou te mostrar um exemplo de como ficaria:

    type EventData = {
  id: string
  name: string
  step: 'first_step' | 'second_step'
}

type FormFields = {
  name: string
  age: number
}

type EventDataExtraProps<T> = ¬īfield_${string & keyof T}¬ī

type EventData<T> = {
  id: string
  name: string
  step: 'first_step' | 'second_step'
} & Record<EventDataExtraProps<T>, any>

const event: EventData<FormFields> = {
  id: 'sextou?',
  name: 'thayto',
  step: 'first_step',
  field_name: 'full_name',
  field_age: 22
}

Nesse exemplo, a gente criou um tipo chamado EventData que tem algumas propriedades definidas. Mas também queremos adicionar mais campos relacionados aos campos que temos em cada etapa (step). Com os Template Literal Types, podemos fazer isso!

Espero que tenha entendido um pouquinho sobre os Template Literal Types. E mesmo se voc√™ n√£o aprendeu tudo, pelo menos chegou at√© o final e isso j√° √© √≥timo! Se tiver mais d√ļvidas, estou aqui para ajudar!

1

Sensacional d+, muito obrigado pela contribuição meu amigo!

Seria interessante você adicionar as tipagens na parte do código, pra adicionar é só você colocar o ts após as cráses ```ts

TMJ!