Executando verificação de segurança...
2

Por quê Interfaces são basicamente irrelevantes e você apenas precisa usar type (type alias) em Typescript | Dica rápida para Iniciantes e Jr

Aos devs mais experientes provavelmente já devem saber disso, mas eu achei massa compartilhar essa ideia por quê pode poupar um tempo e se esse hábito se replica sucessivamente, temos uma corrente de compartilhamento de dicas e aprendizados constantes que facilitam a vida e aprendizado de todo mundo.

TLDR: use interface apenas se tá criado libs fora isso use sempre type junto com union types, intersections e os m

Agora vamos direto ao ponto.

Para garantir um single source of truth em projetos, você precisa fazer uma modelagem dos tipos de dados esperados similar ao que faria em um banco de dados, isso servirá para schemas, api Models, definição de objetos e entidades e facilidade absurda em implementar novas features.

Você não precisa de interface por quê a única vantagem que ele tem é poder fazer merge automático, ou seja adicionar mais coisas ao contrato. o que pode levar a inconsistência se passar despercebido.

Type alias faz isso, mas não de forma automática, o que o deita determinístico e previsível, pois você saberá e só poderá seguir o padrão. é como usar const ao invés de let

a seguir
vou criar um tipo que define strings literais através de union type | (operador "ou" para tipagem) isto é, tudo que anotar esse tipo só poderá ser um ou outro, isso é útil para autocomplete, documentação, e facilitar a definição de responsabilidades de cada coisa e reaproveitar a lógica.

Type alias ->  type Contrato = {tipo: 'Político' | 'Social'}

// agora vou fazer uma intersecção entre esses tipos (proposital e visível)

type Emenda = {tipoEntidade: 'Responsável" | "Agente Fiscal"} & Contrato]

tudo que anotar emenda deve seguir essa regra. e eu ainda ganho acesso a utilitários mágicos, que me permite por exemplo reusar um tipo, mas deixar as propriedades opcionais, omitir algum elemento específico( id, por exemplo), isso garante até mesmo otimização, onboarding por causa da semântica. e claro, documentação automática

Com interface, se você reatribui ela é em algum lugar do código, você faz uma adição nela, e os tipos se juntam. não há motivos para fazer isso de forma intencional, mas abre brechas para bugs silenciosos e tempo de debug perdido

Interface só será útil na criação de bibliotecas novas(você não pode bloquear extensões, aí o jeito é usar o merge do interface), onde você tem que permitir que usuário injetem coisas nvoas, fora isso type é tramontina.

Carregando publicação patrocinada...
1

Eu não acho que é bem assim e o merge automático da interface é bem interessante quando bem usado. Um bom exemplo:

  interface Env {
    DB_PATH: string;
    JWT: string;
  }

Esse é um caso onde eu precisei convencer ao compilador que as variáveis de ambiente JWT e DB_PATH existem na interface interna do Bun prevenindo checagem contra undefined.

Outro ponto é que o merge automático só acontece se explicitamente escrever uma interface com o mesmo nome. Se alguém faz isso antes de verificar, é no mínimo desatento...

Interfaces também são idiomáticas para firmar um contrato entre objetos, enquanto tipos são idiomáticos, bem, é óbvios...

Existe um monte de utilidade para interfaces e, obviamente não irei me aprofundar tanto assim. TypeScript por si só é bem cru no que diz respeito a tipagem, então a discussão teria um monte de exceções ou ênfases.