DEV Community

Cover image for 💡 TypeScript - Template Literal Types
Rafael Thayto
Rafael Thayto

Posted on • Updated on

💡 TypeScript - 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}`
Enter fullscreen mode Exit fullscreen mode

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'
}
Enter fullscreen mode Exit fullscreen mode

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
}
Enter fullscreen mode Exit fullscreen mode

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 tenham aprendido algo, se não aprendeu, pelo menos leu até o final, tmj!

https://www.typescriptlang.org/docs/handbook/2/template-literal-types.html

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

Top comments (1)

Collapse
 
gabrielduete profile image
Gabriel Duete

Caraca que doidera! Muito dahora, mano!