{"componentChunkName":"component---src-templates-docs-js","path":"/docs/static-type-checking.html","result":{"data":{"markdownRemark":{"html":"<p>Verificadores de tipos estáticos, como <a href=\"https://flow.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Flow</a> e <a href=\"https://www.typescriptlang.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">TypeScript</a>, identificam certos tipos de problemas mesmo antes do seu código ser executado. Eles também melhoram o fluxo de trabalho do desenvolvedor adicionando features como preenchimento automático. Por isso, recomendamos usar Flow ou TypeScript ao invés de <code class=\"gatsby-code-text\">PropTypes</code> para bases de código maiores.</p>\n<h2 id=\"flow\"><a href=\"#flow\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Flow </h2>\n<p><a href=\"https://flow.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Flow</a> é um verificador de tipos estáticos para o seu código JavaScript. É desenvolvido no Facebook e frequentemente usado com o React. Ele permite que você faça anotações às variáveis, funções e componentes do React com um tipo especial de sintaxe e capture erros cedo. Você pode ler a <a href=\"https://flow.org/en/docs/getting-started/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">introdução ao Flow</a> para aprender o básico.</p>\n<p>Para usar o Flow, você precisa:</p>\n<ul>\n<li>Adicionar o Flow como dependência ao seu projeto.</li>\n<li>Garantir que a sintaxe do Flow seja removida do código compilado.</li>\n<li>Adicionar anotações de tipo e executar o Flow para checá-las.</li>\n</ul>\n<p>Explicaremos abaixo esses passos com detalhes.</p>\n<h3 id=\"adding-flow-to-a-project\"><a href=\"#adding-flow-to-a-project\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Adicionando Flow a um Projeto </h3>\n<p>Primeiro, use o terminal e navegue até o diretório do seu projeto. Você precisará executar o seguinte comando:</p>\n<p>Se você usa <a href=\"https://yarnpkg.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Yarn</a>, execute:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">yarn</span> <span class=\"token function\">add</span> --dev flow-bin</code></pre></div>\n<p>Se você usa <a href=\"https://www.npmjs.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">npm</a>, execute:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">npm</span> <span class=\"token function\">install</span> --save-dev flow-bin</code></pre></div>\n<p>Este comando instala a versão mais recente do Flow no seu projeto.</p>\n<p>Agora, adicione <code class=\"gatsby-code-text\">flow</code> à seção <code class=\"gatsby-code-text\">&quot;scripts&quot;</code> do seu <code class=\"gatsby-code-text\">package.json</code> para conseguir usar isto no terminal:</p>\n<div class=\"gatsby-highlight has-highlighted-lines\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// ...</span>\n  <span class=\"token string\">\"scripts\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n<span class=\"gatsby-highlight-code-line\">    <span class=\"token string\">\"flow\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"flow\"</span><span class=\"token punctuation\">,</span></span>    <span class=\"token comment\">// ...</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token comment\">// ...</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Por fim, execute um dos comandos a seguir:</p>\n<p>Se você usa <a href=\"https://yarnpkg.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Yarn</a>, execute:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">yarn</span> run flow init</code></pre></div>\n<p>Se você usa <a href=\"https://www.npmjs.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">npm</a>, execute:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">npm</span> run flow init</code></pre></div>\n<p>Este comando criará um arquivo de configuração do Flow que você precisará fazer commit.</p>\n<h3 id=\"stripping-flow-syntax-from-the-compiled-code\"><a href=\"#stripping-flow-syntax-from-the-compiled-code\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Separando a Sintaxe do Flow do Código Compilado </h3>\n<p>O Flow estende a linguagem JavaScript com uma sintaxe especial para anotações de tipo. Entretanto, os navegadores não estão cientes desta sintaxe. Assim, precisamos ter certeza que a sintaxe do Flow não permaneça no código JavaScript compilado que é enviado ao navegador.</p>\n<p>A forma exata de fazer isso depende das ferramentas que você usa para compilar o JavaScript.</p>\n<h4 id=\"create-react-app\"><a href=\"#create-react-app\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Create React App </h4>\n<p>Se o seu projeto foi configurado com <a href=\"https://github.com/facebookincubator/create-react-app\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Create React App</a>, parabéns! As anotações do Flow já estão sendo retiradas por padrão, então você não precisa fazer mais nada nesta etapa.</p>\n<h4 id=\"babel\"><a href=\"#babel\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Babel </h4>\n<blockquote>\n<p>Nota:</p>\n<p>Estas instruções <em>não</em> são para usuários do Create React App. Apesar do Create React App usar Babel por baixo dos panos, ele já está configurado para entender o Flow. Siga estes passos somente se você <em>não</em> usa o Create React App.</p>\n</blockquote>\n<p>Se você configurou o Babel manualmente no seu projeto, precisará instalar um preset especial para Flow.</p>\n<p>Se você usa <a href=\"https://yarnpkg.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Yarn</a>, execute:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">yarn</span> <span class=\"token function\">add</span> --dev @babel/preset-flow</code></pre></div>\n<p>Se você usa <a href=\"https://www.npmjs.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">npm</a>, execute:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">npm</span> <span class=\"token function\">install</span> --save-dev @babel/preset-flow</code></pre></div>\n<p>Então adicione o preset <code class=\"gatsby-code-text\">flow</code> à sua <a href=\"https://babeljs.io/docs/usage/babelrc/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">configuração do Babel</a>. Por exemplo, se você configura o Babel através do arquivo <code class=\"gatsby-code-text\">.babelrc</code>, pode ficar parecido com isto:</p>\n<div class=\"gatsby-highlight has-highlighted-lines\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token punctuation\">{</span>\n  <span class=\"token string\">\"presets\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n<span class=\"gatsby-highlight-code-line\">    <span class=\"token string\">\"@babel/preset-flow\"</span><span class=\"token punctuation\">,</span></span>    <span class=\"token string\">\"react\"</span>\n  <span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Isto permitirá que você use a sintaxe do Flow no seu código.</p>\n<blockquote>\n<p>Nota:</p>\n<p>O Flow não requer o preset <code class=\"gatsby-code-text\">react</code>, mas eles são frequentemente usados juntos. O Flow por si só já vem pronto para entender a sintaxe JSX.</p>\n</blockquote>\n<h4 id=\"other-build-setups\"><a href=\"#other-build-setups\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Outras Configurações de Build </h4>\n<p>Se você não usa Create React App nem Babel, você pode usar <a href=\"https://github.com/flowtype/flow-remove-types\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">flow-remove-types</a> para remover as anotações de tipos.</p>\n<h3 id=\"running-flow\"><a href=\"#running-flow\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Executando o Flow </h3>\n<p>Se você seguiu os passos acima, deve ser capaz de executar o Flow pela primeira vez.</p>\n<p>Se você usa <a href=\"https://yarnpkg.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Yarn</a>, execute:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">yarn</span> flow</code></pre></div>\n<p>Se você usa <a href=\"https://www.npmjs.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">npm</a>, execute:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">npm</span> run flow</code></pre></div>\n<p>Você deverá ver uma mensagem como esta:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"gatsby-code-text\"><code class=\"gatsby-code-text\">No errors!\n✨  Done in 0.17s.</code></pre></div>\n<h3 id=\"adding-flow-type-annotations\"><a href=\"#adding-flow-type-annotations\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Adicionando Anotações de Tipo do Flow </h3>\n<p>Por padrão, o Flow checa apenas os arquivos que incluem esta anotação:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token comment\">// @flow</span></code></pre></div>\n<p>Normalmente, é posicionado no topo de um arquivo. Tente adicioná-la em alguns arquivos do seu projeto e execute <code class=\"gatsby-code-text\">yarn flow</code> ou <code class=\"gatsby-code-text\">npm run flow</code> para ver se o Flow já achou algum problema.</p>\n<p>Também há <a href=\"https://flow.org/en/docs/config/options/#toc-all-boolean\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">uma opção</a> para forçar o Flow a checar <em>todos</em> os arquivos independente se há a anotação ou não. Isto pode ser meio turbulento para projetos já existentes, mas é sensato para um novo projeto se você quer deixá-lo totalmente tipado com o Flow.</p>\n<p>Agora está tudo certo! Recomendamos dar uma lida nos seguintes recursos para aprender mais sobre o Flow (em inglês):</p>\n<ul>\n<li><a href=\"https://flow.org/en/docs/types/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Flow Documentation: Type Annotations</a></li>\n<li><a href=\"https://flow.org/en/docs/editors/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Flow Documentation: Editors</a></li>\n<li><a href=\"https://flow.org/en/docs/react/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Flow Documentation: React</a></li>\n<li><a href=\"https://medium.com/flow-type/linting-in-flow-7709d7a7e969\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Linting in Flow</a></li>\n</ul>\n<h2 id=\"typescript\"><a href=\"#typescript\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>TypeScript </h2>\n<p>O <a href=\"https://www.typescriptlang.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">TypeScript</a> é uma linguagem de programação desenvolvida pela Microsoft. É um superset tipado do JavaScript e inclui seu próprio compilador. Sendo uma linguagem tipada, o TypeScript consegue detectar erros e bugs em tempo de compilação, muito antes do seu aplicativo iniciar. Você pode aprender mais sobre o uso do TypeScript com React <a href=\"https://github.com/Microsoft/TypeScript-React-Starter#typescript-react-starter\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">aqui</a>.</p>\n<p>Para usar o TypeScript você precisa:</p>\n<ul>\n<li>Adicionar o TypeScript como uma dependência ao seu projeto</li>\n<li>Configurar as opções de compilação do TypeScript</li>\n<li>Usar as extensões de arquivos corretas</li>\n<li>Adicionar definições para bibliotecas que você usa</li>\n</ul>\n<p>Vamos passar por cada uma em detalhes.</p>\n<h3 id=\"using-typescript-with-create-react-app\"><a href=\"#using-typescript-with-create-react-app\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Usando TypeScript com Create React App </h3>\n<p>O Create React App já vem com suporte para o TypeScript.</p>\n<p>Para criar um <strong>novo projeto</strong> com suporte ao TypeScript, execute:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\">npx create-react-app my-app --template typescript</code></pre></div>\n<p>Vocë também pode adicioná-lo a um <strong>projeto Create React App existente</strong>, <a href=\"https://facebook.github.io/create-react-app/docs/adding-typescript\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">como está documentado aqui</a>.</p>\n<blockquote>\n<p>Nota:</p>\n<p>Se você usa Create React App, você pode <strong>pular o resto desta página</strong>. Ela descreve a configuração manual no qual não se aplicam a usuários do Create React App.</p>\n</blockquote>\n<h3 id=\"adding-typescript-to-a-project\"><a href=\"#adding-typescript-to-a-project\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Adicionando TypeScript a um Projeto </h3>\n<p>Tudo começa executando um comando no seu terminal.</p>\n<p>Se você usa <a href=\"https://yarnpkg.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Yarn</a>, execute:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">yarn</span> <span class=\"token function\">add</span> --dev typescript</code></pre></div>\n<p>Se você usa <a href=\"https://www.npmjs.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">npm</a>, execute:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">npm</span> <span class=\"token function\">install</span> --save-dev typescript</code></pre></div>\n<p>Parabéns! Você instalou a versão mais recente do TypeScript no seu projeto. Instalar o TypeScript nos dá acesso ao comando <code class=\"gatsby-code-text\">tsc</code>. Antes da configuração, vamos adicionar <code class=\"gatsby-code-text\">tsc</code> à seção “scripts” no nosso <code class=\"gatsby-code-text\">package.json</code>:</p>\n<div class=\"gatsby-highlight has-highlighted-lines\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// ...</span>\n  <span class=\"token string\">\"scripts\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n<span class=\"gatsby-highlight-code-line\">    <span class=\"token string\">\"build\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"tsc\"</span><span class=\"token punctuation\">,</span></span>    <span class=\"token comment\">// ...</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token comment\">// ...</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"configuring-the-typescript-compiler\"><a href=\"#configuring-the-typescript-compiler\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Configurando o Compilador do TypeScript </h3>\n<p>O compilador não é de ajuda alguma até que o dizemos o que deve fazer. No TypeScript, essas regras são definidas em um arquivo especial chamado <code class=\"gatsby-code-text\">tsconfig.json</code>. Para gerar esse arquivo execute:</p>\n<p>Se você usa <a href=\"https://yarnpkg.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Yarn</a>, execute:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">yarn</span> run tsc --init</code></pre></div>\n<p>Se você usa <a href=\"https://www.npmjs.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">npm</a>, execute:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\">npx tsc --init</code></pre></div>\n<p>Olhando o então gerado <code class=\"gatsby-code-text\">tsconfig.json</code>, você pode ver que há muitas opções que você pode usar para configurar o compilador. Para uma descrição detalhada de todas as opções, veja <a href=\"https://www.typescriptlang.org/docs/handbook/tsconfig-json.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">aqui</a>.</p>\n<p>Das muitas opções, daremos uma olhada em <code class=\"gatsby-code-text\">rootDir</code> e <code class=\"gatsby-code-text\">outDir</code>. Na sua forma verdadeira, o compilador receberá arquivos typescript e gerará arquivos javascript. Entretanto, não queremos que nossos arquivos fontes e a saída gerada fiquem confusos.</p>\n<p>Vamos cobrir isso em dois passos:</p>\n<ul>\n<li>Primeiramente, vamos organizar a estrutura do nosso projeto desta forma. Iremos colocar todo o nosso código-fonte na pasta <code class=\"gatsby-code-text\">src</code>.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"gatsby-code-text\"><code class=\"gatsby-code-text\">├── package.json\n├── src\n│   └── index.ts\n└── tsconfig.json</code></pre></div>\n<ul>\n<li>Depois, diremos ao compilador onde nosso código-fonte está e para onde a saída deverá ir.</li>\n</ul>\n<div class=\"gatsby-highlight has-highlighted-lines\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token comment\">// tsconfig.json</span>\n\n<span class=\"token punctuation\">{</span>\n  <span class=\"token string\">\"compilerOptions\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// ...</span>\n<span class=\"gatsby-highlight-code-line\">    <span class=\"token string\">\"rootDir\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"src\"</span><span class=\"token punctuation\">,</span></span><span class=\"gatsby-highlight-code-line\">    <span class=\"token string\">\"outDir\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"build\"</span></span>    <span class=\"token comment\">// ...</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Ótimo! Agora quando executarmos o nosso script de build, o compilador vai colocar o JavaScript gerado na pasta <code class=\"gatsby-code-text\">build</code>. O <a href=\"https://github.com/Microsoft/TypeScript-React-Starter/blob/master/tsconfig.json\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">TypeScript React Starter</a> oferece um <code class=\"gatsby-code-text\">tsconfig.json</code> com um bom conjunto de regras para você começar.</p>\n<p>Geralmente, você não quer manter o JavaScript gerado no seu repositório, então tenha certeza de que adicionou a pasta do build no seu <code class=\"gatsby-code-text\">.gitignore</code>.</p>\n<h3 id=\"file-extensions\"><a href=\"#file-extensions\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Extensões de Arquivos </h3>\n<p>No React, você provavelmente escreverá seus componentes em um arquivo <code class=\"gatsby-code-text\">.js</code>. No TypeScript temos 2 extensões de arquivo:</p>\n<p><code class=\"gatsby-code-text\">.ts</code> é a extensão de arquivo padrão, enquanto <code class=\"gatsby-code-text\">.tsx</code> é uma extensão especial usada em arquivos que contém <code class=\"gatsby-code-text\">JSX</code>.</p>\n<h3 id=\"running-typescript\"><a href=\"#running-typescript\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Executando o TypeScript </h3>\n<p>Se você seguiu as instruções acima, você deverá ser capaz de executar o TypeScript pela primeira vez.</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">yarn</span> build</code></pre></div>\n<p>Se você usa npm, execute:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token function\">npm</span> run build</code></pre></div>\n<p>Se você não vê um output, significa que completou com sucesso.</p>\n<h3 id=\"type-definitions\"><a href=\"#type-definitions\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Definições de Tipo </h3>\n<p>Para ser capaz de mostrar erros e dicas de outros pacotes, o compilador depende dos arquivos de declaração. Um arquivo de declaração oferece todo a informação de tipos sobre uma biblioteca. Isso nos permite usar bibliotecas javascript, como as que estão no npm, no nosso projeto.</p>\n<p>Existem duas formas principais de conseguir declarações para uma biblioteca:</p>\n<p><strong>Bundled</strong> - A biblioteca empacota o seu próprio arquivo de declaração. Isto é ótimo para nós, pois tudo o que precisaremos fazer é instalar a biblioteca e estaremos prontos para usá-la. Para verificar se uma biblioteca tem tipos empacotados, procure por um arquivo <code class=\"gatsby-code-text\">index.d.ts</code> no projeto. Algumas bibliotecas terá o arquivo especificado em seus <code class=\"gatsby-code-text\">package.json</code>, no campo <code class=\"gatsby-code-text\">typings</code> ou <code class=\"gatsby-code-text\">types</code>.</p>\n<p><strong><a href=\"https://github.com/DefinitelyTyped/DefinitelyTyped\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">DefinitelyTyped</a></strong> - DefinitelyTyped é um repositório enorme de declarações para bibliotecas que não empacotam um arquivo de declaração. As declarações são feitas pelo público e gerenciadas pela Microsoft e contribuidores de código aberto. O React, por exemplo, não empacota seu próprio arquivo de declaração. Em vez disso, nós podemos pegá-lo do DefinitelyTyped. Para isso, entre este comando no seu terminal:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"gatsby-code-bash\"><code class=\"gatsby-code-bash\"><span class=\"token comment\"># yarn</span>\n<span class=\"token function\">yarn</span> <span class=\"token function\">add</span> --dev @types/react\n\n<span class=\"token comment\"># npm</span>\n<span class=\"token function\">npm</span> i --save-dev @types/react</code></pre></div>\n<p><strong>Declarações Locais</strong>\nAlgumas vezes o pacote que você quer usar não empacota declarações nem está disponível no DefinitelyTyped. Neste caso, podemos ter um arquivo de declaração local. Para fazer isto, crie um arquivo <code class=\"gatsby-code-text\">declarations.d.ts</code> na raiz da pasta do seu código fonte. Uma declaração simples ficaria assim:</p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"gatsby-code-typescript\"><code class=\"gatsby-code-typescript\"><span class=\"token keyword\">declare</span> <span class=\"token keyword\">module</span> <span class=\"token string\">'querystring'</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">export</span> <span class=\"token keyword\">function</span> <span class=\"token function\">stringify</span><span class=\"token punctuation\">(</span>val<span class=\"token operator\">:</span> object<span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token builtin\">string</span>\n  <span class=\"token keyword\">export</span> <span class=\"token keyword\">function</span> <span class=\"token function\">parse</span><span class=\"token punctuation\">(</span>val<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> object\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Vocé agora pode começar a programar! Nós recomendamos verificar os seguintes recursos para aprender mais sobre TypeScript (em inglês):</p>\n<ul>\n<li><a href=\"https://www.typescriptlang.org/docs/handbook/basic-types.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">TypeScript Documentation: Basic Types</a></li>\n<li><a href=\"https://www.typescriptlang.org/docs/handbook/migrating-from-javascript.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">TypeScript Documentation: Migrating from JavaScript</a></li>\n<li><a href=\"https://www.typescriptlang.org/docs/handbook/react-&#x26;-webpack.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">TypeScript Documentation: React and Webpack</a></li>\n</ul>\n<h2 id=\"reason\"><a href=\"#reason\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Reason </h2>\n<p><a href=\"https://reasonml.github.io/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Reason</a> não é uma linguagem nova; é uma nova sintaxe e cadeia de ferramentas disponibilizada pela linguagem testada em batalha <a href=\"https://ocaml.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">OCaml</a>. A Reason dá a OCaml uma sintaxe familiar voltada para programadores JavaScript e atende ao fluxo de trabalho do NPM/Yarn que o pessoal já conhece.</p>\n<p>A Reason é desenvolvida no Facebook e é usada em alguns dos seus produtos como o Messenger. Ainda é de alguma forma experimental, mas ela tem <a href=\"https://reasonml.github.io/reason-react/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ligações dedicadas com o React</a> mantida pelo Facebook e pela <a href=\"https://reasonml.github.io/docs/en/community.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">comunidade vibrante</a>.</p>\n<h2 id=\"kotlin\"><a href=\"#kotlin\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Kotlin </h2>\n<p><a href=\"https://kotlinlang.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Kotlin</a> é uma linguagem estaticamente tipada desenvolvida pelo JetBrains. As plataformas alvo dela incluem o JVM, Android, LLVM e <a href=\"https://kotlinlang.org/docs/reference/js-overview.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">JavaScript</a>.</p>\n<p>JetBrains desenvolve e mantém algumas ferramentas especificamente para a comunidade do React: <a href=\"https://github.com/JetBrains/kotlin-wrappers\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ligações com o React</a> assim como <a href=\"https://github.com/JetBrains/create-react-kotlin-app\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Create React Kotlin App</a>. A última auxilia você a começar a construir aplicações React com Kotlin sem precisar configurar um build.</p>\n<h2 id=\"other-languages\"><a href=\"#other-languages\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Outras Linguagens </h2>\n<p>Perceba que há outras linguagens estaticamente tipadas que compilam para JavaScript e assim são compatíveis com React. Por exemplo, <a href=\"https://fable.io/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">F#/Fable</a> com <a href=\"https://elmish.github.io/react\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">elmish-react</a>. Verifique os respectivos sites para mais informações e sinta-se livre para adicionar a esta página mais linguagens estaticamente tipadas que trabalham com React!</p>","frontmatter":{"title":"Verificando Tipos Estáticos","next":null,"prev":null},"fields":{"path":"content/docs/static-type-checking.md","slug":"docs/static-type-checking.html"}}},"pageContext":{"slug":"docs/static-type-checking.html"}},"staticQueryHashes":[]}