#1 Pensar em termos de {conjuntos (Set)}
#2 Entender os tipos declarados e os tipos restringidos (narrowed)
#3 Usar uniões discriminadas em vez de campos opcionais
#4 Usar predicados de tipo para evitar asserções de tipo
#5 Controlar a distribuição de tipos união
#6 Verificar casos não tratados em tempo de compilação com checagens exaustivas
#7 Usar type em vez de interface
#8 Em situações apropriadas, usar tuplas em vez de arrays
#9 Controlar para que os tipos inferidos sejam genéricos ou específicos
#10 Usar infer para criar parâmetros de tipo genéricos adicionais
#11 Ser criativo com manipulação de tipos para manter o código DRY
Conclusão
6 comentários
Parece que o item 7 foi escrito a partir da perspectiva do React.
Eu prefiro
interfaceatype. Também é uma sintaxe presente em outras linguagens.Eu também. Lembro que antigamente até no handbook do TypeScript havia a recomendação de usar interfaces de preferência sempre que possível.
É este conteúdo.
Concordo com quase tudo, mas usar
typeem vez deinterfaceno item 7 é meio forçado, né? Não dá para chamar isso exatamente de dica. Há casos em que a expressividade deinterfaceé melhor, por exemplo:interface Foo {(b: number): A; (): B}Não estou defendendo
type, mas não entendo bem o exemplo de que ele tem melhor expressividade. Não seria possível expressar o mesmo exemplo igualmente comtype?interface Foo {(b: number): A; (): B}
type Foo = {(b: number): A; (): B}
No livro Effective TypeScript, há uma parte que organiza quando usar tipos e interfaces, então vou citá-la.
Se for um projeto cujo estilo ainda não está estabelecido, vale pensar se haverá possibilidade de ampliação no futuro. Se você precisar escrever declarações de tipo para alguma API, é melhor usar interface. Isso é útil porque, quando a API mudar, os usuários podem mesclar novos campos por meio da interface. Porém, se ocorrer mesclagem de declarações em tipos usados internamente no projeto, isso indica um design ruim. Portanto, nesse caso, deve-se usar tipo.