Como o sistema de tipos aprimora seu código JavaScript

Portanto, você não tem tempo para se virar e o mês já está se esforçando para ser concluído. Faltam alguns dias para o lançamento de um novo tópico no curso "JavaScript Developer" , de acordo com a tradição, antes de iniciar o curso, compartilharemos com você a tradução de material útil.

Vanilla JavaScript não é digitado por natureza. Você pode até chamá-lo de "inteligente", porque ele é capaz de calcular o que é um número e o que é uma string.

Isso facilita a execução do código JavaScript em um navegador ou na execução do Node.js. No entanto, é vulnerável a vários erros de tempo de execução (tempo de execução), que podem arruinar a sua experiência do usuário.



Se você acontecer com o que será descrito posteriormente, você só ganhará se usar o sistema de tipos.

  • Após receber uma lista de dados, você descobre que um determinado campo não existe em um dos registros. Isso leva a um mau funcionamento do aplicativo se este caso não for detectado e não processado explicitamente.
  • A instância da classe que você importou não possui o método que você está tentando chamar.
  • Seu IDE não sabe quais métodos e propriedades estão disponíveis para módulos e bibliotecas, portanto, não pode oferecer o preenchimento automático com eficiência.

Flow, TypeScript ou ReasonML

Digamos que você tenha uma base de código existente que deseja tornar mais confiável e estável. Tendo em conta os erros de digitação existentes, você pode tentar usar o Flow ou o TypeScript para isso (eles têm uma sintaxe bastante semelhante).

Por outro lado, o uso de cada uma dessas ferramentas volumosas é complicado. Você se encarregará do trabalho de criação de tipos e interfaces para códigos que não foram desenvolvidos anteriormente.

No entanto, o Flow e o TypeScript não oferecem 100% de segurança ao adicionar a digitação do código.
Por esse motivo, a segurança de digitação ideal é obtida por inferência e simplifica as anotações de variáveis ​​e assinaturas de funções.

Exemplos simples e claramente planejados

Considere o seguinte código:

let add = (a, b) => a + b; 

No JavaScript comum, esses argumentos podem ser números ou seqüências de caracteres. No TypeScript ou no Flow, esses argumentos podem ser anotados como:

 let add = (a: number, b: number) => a + b 

Agora, aparentemente, estamos definindo exatamente dois valores int. Não são dois carros alegóricos ou duas cordas; outros operadores são usados ​​para suas operações de adição.

Agora, vamos dar uma olhada em um exemplo ligeiramente modificado no Reason:

 let add = (a: string, b: number) => a + b add('some string', 5) // outputs: "some string5" 

Esse recurso funciona! E isso pode parecer surpreendente. Como o Reason entende isso?

 let add = (a, b) => a + b; add("some string", 5); /* This has type: string but somewhere wanted: int */ 

Esse recurso apresentava falhas no nível de implementação. O motivo tem operadores diferentes para adicionar int, float e string.

O objetivo deste exemplo simples é mostrar que é possível ter "erros de tipo" extras, mesmo que isso não elimine o aplicativo.

Em um programa Reason, os desenvolvedores não precisam lidar com erros de produção que surgem devido à incompatibilidade de tipos ou valores nulos.

Experiência do desenvolvedor

Um dos melhores recursos do TypeScript é que você vê sugestões para aprimoramento ou preenchimento automático no editor de código.

Essa é uma área em que o TypeScript tem precedência sobre o Reason, porque um programa TypeScript não precisa ser compilado perfeitamente para oferecer o preenchimento automático. O motivo forçará você a corrigir todos os erros na sintaxe e nos tipos antes de oferecer uma correção útil.

É assim que funciona no VSCode, mas conheço muitos desenvolvedores do Reason que usam o vim. Aqui não entraremos em comparações.

Embora eu seja um grande fã do Reason, também escrevi aplicativos em TypeScript ou Flow. A onda de hype em torno do TypeScript oferece um bom incentivo para sua escolha, por isso, possui um ótimo suporte da comunidade.

A razão, por outro lado, é mais difícil de usar, porque menos artigos e documentação estão disponíveis. Espero que com o seu desenvolvimento isso seja corrigido.

Se você está interessado em Motivo, pode encontrar a documentação aqui . E siga pessoas como @jordwalke , @jaredforsyth e @sgrove no Twitter. Eles podem dizer muito sobre o ecossistema Reason / OCaml.

Se você quiser saber como o Reason funciona com o GraphQL, consulte meu outro artigo, “Reason with GraphQL, o futuro dos aplicativos Web seguros para tipos” .

Estamos aguardando feedback sobre o material e, de acordo com a tradição estabelecida, convidamos todos os leitores para um dia aberto , que será realizado no dia 25 de março pelo nosso professor, Alexander Korzhikov .

Source: https://habr.com/ru/post/pt444576/


All Articles