devterview_$ iniciar simulação

Tipagem estrutural (duck typing) x nominal

DifícilSêniorSistema de tipos

Pergunta

TypeScript usa tipagem estrutural. O que isso quer dizer na prática, e quando ela te morde?

Resposta esperada

Tipagem estrutural: um valor é compatível com um tipo se tiver a forma (as propriedades) esperada, independente de ter sido declarado como aquele tipo. `function f(p: { x: number })` aceita qualquer objeto com um `x: number`, mesmo de uma classe/interface diferente. Vantagem: menos boilerplate, ótima interoperabilidade, fácil de mockar em teste. Onde morde: dois tipos com a mesma forma mas significados diferentes são intercambiáveis sem querer — um `UserId` e um `OrderId` que são ambos `string` se misturam, ou `Metros` e `Pes` que são ambos `number`. A solução idiomática é 'branded types' (`type UserId = string & { readonly __brand: 'UserId' }`) pra forçar distinção nominal onde ela importa. Também morde com excesso de propriedades em objetos literais (o TS tem uma checagem extra só pra literais).

Por que perguntam isso

Pergunta pleno/sênior de TS. Termo-chave: 'branded types' / 'nominal typing'. Bônus: a checagem de excess property em literais.

#structural-typing#branded-types#nominal
publicidade

Relacionadas