|
| 1 | +--- |
| 2 | +title: Declarações de Tipo |
| 3 | +layout: docs |
| 4 | +permalink: /pt/docs/handbook/2/type-declarations.html |
| 5 | +oneline: "Como o TypeScript fornece tipos para JavaScript não tipado." |
| 6 | +--- |
| 7 | + |
| 8 | +Ao longo das seções que você leu até agora, estivemos demonstrando conceitos básicos do TypeScript usando as funções embutidas presentes em todos os runtimes de JavaScript. |
| 9 | +No entanto, quase todo JavaScript hoje inclui muitas bibliotecas para realizar tarefas comuns. |
| 10 | +Ter tipos para as partes da sua aplicação que _não são_ o seu código vai melhorar muito a sua experiência com TypeScript. |
| 11 | +De onde vêm esses tipos? |
| 12 | + |
| 13 | +## Com o Que se Parecem as Declarações de Tipo? |
| 14 | + |
| 15 | +Digamos que você escreva um código como este: |
| 16 | + |
| 17 | +```ts twoslash |
| 18 | +// @errors: 2339 |
| 19 | +const k = Math.max(5, 6); |
| 20 | +const j = Math.mix(7, 8); |
| 21 | +``` |
| 22 | + |
| 23 | +Como o TypeScript sabia que `max` estava presente, mas `mix` não, mesmo que a implementação de `Math` não fizesse parte do seu código? |
| 24 | + |
| 25 | +A resposta é que existem _arquivos de declaração_ (declaration files) descrevendo esses objetos embutidos. |
| 26 | +Um arquivo de declaração fornece uma forma de _declarar_ a existência de alguns tipos ou valores sem realmente fornecer implementações para esses valores. |
| 27 | + |
| 28 | +## Arquivos `.d.ts` |
| 29 | + |
| 30 | +O TypeScript tem dois tipos principais de arquivos. |
| 31 | +Arquivos `.ts` são arquivos de _implementação_ que contêm tipos e código executável. |
| 32 | +Esses são os arquivos que produzem saídas `.js`, e são onde você normalmente escreveria seu código. |
| 33 | + |
| 34 | +Arquivos `.d.ts` são arquivos de _declaração_ que contêm _apenas_ informação de tipo. |
| 35 | +Esses arquivos não produzem saídas `.js`; eles são usados apenas para verificação de tipos. |
| 36 | +Vamos aprender mais sobre como escrever nossos próprios arquivos de declaração mais tarde. |
| 37 | + |
| 38 | +## Definições de Tipo Embutidas |
| 39 | + |
| 40 | +O TypeScript inclui arquivos de declaração para todas as APIs embutidas padronizadas disponíveis nos runtimes de JavaScript. |
| 41 | +Isso inclui coisas como métodos e propriedades de tipos embutidos como `string` ou `function`, nomes de nível superior como `Math` e `Object`, e seus tipos associados. |
| 42 | +Por padrão, o TypeScript também inclui tipos para coisas disponíveis ao rodar dentro do navegador, como `window` e `document`; estes são coletivamente chamados de APIs do DOM. |
| 43 | + |
| 44 | +O TypeScript nomeia esses arquivos de declaração com o padrão `lib.[algo].d.ts`. |
| 45 | +Se você navegar até um arquivo com esse nome, pode saber que está lidando com alguma parte embutida da plataforma, não com código do usuário. |
| 46 | + |
| 47 | +### Configuração `target` |
| 48 | + |
| 49 | +Os métodos, propriedades e funções disponíveis para você variam, na verdade, com base na _versão_ do JavaScript em que seu código está rodando. |
| 50 | +Por exemplo, o método `startsWith` de strings está disponível apenas a partir da versão do JavaScript conhecida como _ECMAScript 6_. |
| 51 | + |
| 52 | +Estar ciente de qual versão do JavaScript seu código vai rodar no fim das contas é importante porque você não quer usar APIs que são de uma versão mais nova do que a plataforma na qual você faz deploy. |
| 53 | +Esta é uma das funções da configuração de compilador [`target`](/tsconfig#target). |
| 54 | + |
| 55 | +O TypeScript ajuda com esse problema variando quais arquivos `lib` são incluídos por padrão com base na sua configuração [`target`](/tsconfig#target). |
| 56 | +Por exemplo, se [`target`](/tsconfig#target) for `ES5`, você vai ver um erro ao tentar usar o método `startsWith`, porque esse método só está disponível no `ES6` ou posterior. |
| 57 | + |
| 58 | +### Configuração `lib` |
| 59 | + |
| 60 | +A configuração [`lib`](/tsconfig#lib) permite um controle mais granular sobre quais arquivos de declaração embutidos são considerados disponíveis no seu programa. |
| 61 | +Veja a página de documentação sobre [`lib`](/tsconfig#lib) para mais informações. |
| 62 | + |
| 63 | +## Definições Externas |
| 64 | + |
| 65 | +Para APIs não embutidas, há uma variedade de formas de obter arquivos de declaração. |
| 66 | +Como você faz isso depende exatamente de qual biblioteca você está obtendo tipos. |
| 67 | + |
| 68 | +### Tipos Empacotados |
| 69 | + |
| 70 | +Se uma biblioteca que você está usando é publicada como um pacote npm, ela pode já incluir arquivos de declaração de tipo como parte de sua distribuição. |
| 71 | +Você pode ler a documentação do projeto para descobrir, ou simplesmente tentar importar o pacote e ver se o TypeScript consegue resolver os tipos automaticamente para você. |
| 72 | + |
| 73 | +Se você é autor de um pacote considerando empacotar definições de tipo com seu pacote, pode ler nosso guia sobre [empacotar definições de tipo](/docs/handbook/declaration-files/publishing.html#including-declarations-in-your-npm-package). |
| 74 | + |
| 75 | +### DefinitelyTyped / `@types` |
| 76 | + |
| 77 | +O [repositório DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/) é um repo centralizado que armazena arquivos de declaração para milhares de bibliotecas. |
| 78 | +A grande maioria das bibliotecas comumente usadas tem arquivos de declaração disponíveis no DefinitelyTyped. |
| 79 | + |
| 80 | +Definições no DefinitelyTyped também são publicadas automaticamente no npm sob o escopo `@types`. |
| 81 | +O nome do pacote de tipos é sempre o mesmo que o nome do próprio pacote subjacente. |
| 82 | +Por exemplo, se você instalou o pacote npm `react`, pode instalar seus tipos correspondentes rodando |
| 83 | + |
| 84 | +```sh |
| 85 | +npm install --save-dev @types/react |
| 86 | +``` |
| 87 | + |
| 88 | +O TypeScript encontra automaticamente definições de tipo em `node_modules/@types`, então não há nenhum outro passo necessário para deixar esses tipos disponíveis no seu programa. |
| 89 | + |
| 90 | +### Suas Próprias Definições |
| 91 | + |
| 92 | +No caso incomum de uma biblioteca não empacotar seus próprios tipos e não ter uma definição no DefinitelyTyped, você pode escrever um arquivo de declaração você mesmo. |
| 93 | +Veja o apêndice [Escrevendo Arquivos de Declaração](/docs/handbook/declaration-files/introduction.html) para um guia. |
| 94 | + |
| 95 | +Se você quiser silenciar avisos sobre um módulo específico sem escrever um arquivo de declaração, também pode declarar rapidamente o módulo como tipo `any` colocando uma declaração vazia para ele em um arquivo `.d.ts` no seu projeto. |
| 96 | +Por exemplo, se você quisesse usar um módulo chamado `some-untyped-module` sem ter definições para ele, você escreveria: |
| 97 | + |
| 98 | +```ts twoslash |
| 99 | +declare module "some-untyped-module"; |
| 100 | +``` |
0 commit comments