{"id":59738,"date":"2023-08-01T14:35:37","date_gmt":"2023-08-01T17:35:37","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=59738&#038;post_type=knowledgebase&#038;preview_id=59738"},"modified":"2025-10-01T17:02:02","modified_gmt":"2025-10-01T20:02:02","slug":"o-que-e-typescript","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/","title":{"rendered":"O Que \u00e9 TypeScript? Um Guia Abrangente"},"content":{"rendered":"<p>No cen\u00e1rio digital acelerado de hoje, o JavaScript se tornou a linguagem preferida para construir aplicativos web din\u00e2micas. No entanto, a digita\u00e7\u00e3o din\u00e2mica do JavaScript \u00e0s vezes pode levar a erros sutis, tornando desafiador identific\u00e1-los precocemente no processo de desenvolvimento.<\/p>\n<p>\u00c9 a\u00ed que entra o <a href=\"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/\">TypeScript<\/a>, para revolucionar a maneira como escrevemos o c\u00f3digo <a href=\"https:\/\/kinsta.com\/javascript\/\">JavaScript<\/a>.<\/p>\n<p>Neste artigo, vamos explorar detalhadamente o mundo do TypeScript e examinar suas caracter\u00edsticas, vantagens e melhores pr\u00e1ticas. Voc\u00ea tamb\u00e9m aprender\u00e1 como o TypeScript enfrenta as limita\u00e7\u00f5es do JavaScript e desbloqueia o poder da digita\u00e7\u00e3o est\u00e1tica na constru\u00e7\u00e3o de aplicativos web robustas e escal\u00e1veis.<\/p>\n<p>Vamos come\u00e7ar!<br \/>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>O que \u00e9 TypeScript?<\/h2>\n<p>TypeScript \u00e9 um superconjunto de JavaScript que adiciona digita\u00e7\u00e3o est\u00e1tica opcional e recursos avan\u00e7ados ao JavaScript. Foi desenvolvido pela Microsoft e lan\u00e7ado inicialmente em outubro de 2012. Desde o seu lan\u00e7amento em 2012, ele ganhou rapidamente ampla ado\u00e7\u00e3o na comunidade de desenvolvimento web.<\/p>\n<p>De acordo com a <a href=\"https:\/\/survey.stackoverflow.co\/2022\/#section-most-loved-dreaded-and-wanted-programming-scripting-and-markup-languages\">pesquisa de desenvolvedores Stack Overflow de 2022<\/a>, TypeScript emergiu como a 4\u00aa tecnologia mais amada, com 73,46%. TypeScript foi criado para resolver algumas das limita\u00e7\u00f5es do JavaScript, como sua falta de digita\u00e7\u00e3o forte, que pode levar a erros sutis que s\u00e3o dif\u00edceis de pegar durante o desenvolvimento.<\/p>\n<p>Por exemplo, considere o seguinte c\u00f3digo JavaScript:<\/p>\n<pre><code class=\"language-js\">function add(a, b) {\n  return a + b;\n}\n\nlet result = add(10, \"20\"); \/\/ No error, but result is \"1020\" instead of 30<\/code><\/pre>\n<p>O c\u00f3digo acima cria uma fun\u00e7\u00e3o <code>add<\/code>, cuja digita\u00e7\u00e3o \u00e9 din\u00e2mica. O tipo dos argumentos <code>a<\/code> e <code>b<\/code> n\u00e3o \u00e9 aplicado. Como resultado, passar uma string de caracteres em vez de um n\u00famero como argumento n\u00e3o produz um erro, mas concatena os valores como strings de caracteres, levando a um comportamento inesperado.<\/p>\n<p>Com o TypeScript, a digita\u00e7\u00e3o est\u00e1tica opcional \u00e9 introduzida, permitindo que os <a href=\"https:\/\/kinsta.com\/pt\/blog\/tipos-de-desenvolvedores\/\">desenvolvedores<\/a> especifiquem os tipos de vari\u00e1veis, par\u00e2metros de fun\u00e7\u00e3o e valores de retorno, detectando erros relacionados a tipos durante o desenvolvimento.<\/p>\n<pre><code class=\"language-typescript\">function add(a: number, b: number): number {\n  return a + b;\n}\n\nlet result = add(10, \"20\"); \/\/ Error: Argument of type 'string' is not assignable to parameter of type 'number'<\/code><\/pre>\n<p>No c\u00f3digo TypeScript acima, os tipos de par\u00e2metros <code>a<\/code> e <code>b<\/code> s\u00e3o explicitamente definidos como n\u00fameros. Se uma string for passada como argumento, o TypeScript ir\u00e1 gerar um erro de tempo de build, fornecendo feedback antecipado para detectar poss\u00edveis problemas.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>A Microsoft continua ativamente envolvida na manuten\u00e7\u00e3o e no aprimoramento do TypeScript, lan\u00e7ando regularmente novas vers\u00f5es com recursos aprimorados e melhor desempenho, como a vers\u00e3o mais recente, o <a href=\"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/\">TypeScript 5.0<\/a>.<\/p>\n<\/aside>\n\n\n<h2>Recursos do TypeScript<\/h2>\n<p>O TypeScript oferece v\u00e1rios recursos avan\u00e7ados para o <a href=\"https:\/\/kinsta.com\/web-development\/\">desenvolvimento moderno da web<\/a> que abordam algumas das limita\u00e7\u00f5es do JavaScript. Esses recursos oferecem experi\u00eancia aprimorada para o desenvolvedor e organiza\u00e7\u00e3o do c\u00f3digo. Eles incluem:<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"decimal\" selector=\"h3\" count-number=\"7\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>1. Digita\u00e7\u00e3o est\u00e1tica<\/h3>\n<p>O TypeScript tem um forte sistema de digita\u00e7\u00e3o que permite especificar os tipos de vari\u00e1veis e par\u00e2metros de fun\u00e7\u00e3o em runtime. Isso permite a detec\u00e7\u00e3o precoce de erros relacionados ao tipo, tornando o c\u00f3digo mais confi\u00e1vel e menos propenso a bugs.<\/p>\n<p>No JavaScript, por outro lado, a digita\u00e7\u00e3o das vari\u00e1veis \u00e9 din\u00e2mica, o que significa que seu tipo pode mudar durante o tempo de execu\u00e7\u00e3o.<\/p>\n<p>Por exemplo, o c\u00f3digo JavaScript abaixo mostra a declara\u00e7\u00e3o de duas vari\u00e1veis que s\u00e3o dinamicamente digitadas como n\u00famero e string:<\/p>\n<pre><code class=\"language-js\">let num1 = 10; \/\/ num1 is dynamically typed as a number\nlet num2 = \"20\"; \/\/ num2 is dynamically typed as a string\n\nlet result = num1 + num2; \/\/ No error at compile-time\nconsole.log(result); \/\/ Output: \"1020\"<\/code><\/pre>\n<p>O c\u00f3digo acima produzir\u00e1 &#8220;1020&#8221;, uma concatena\u00e7\u00e3o de n\u00famero e string de caracteres. Essa n\u00e3o \u00e9 a sa\u00edda esperada, o que significa que isso pode afetar seu c\u00f3digo. A desvantagem do JavaScript \u00e9 que ele n\u00e3o gera nenhum erro. Voc\u00ea pode corrigir isso com o TypeScript especificando os tipos de cada vari\u00e1vel:<\/p>\n<pre><code class=\"language-typescript\">let num1: number = 10; \/\/ num1 is statically typed as a number\nlet num2: string = \"20\"; \/\/ num2 is statically typed as a string\n\nlet result = num1 + num2; \/\/ Error: Type 'string' is not assignable to type 'number'<\/code><\/pre>\n<p>No c\u00f3digo acima, uma tentativa de concatenar um n\u00famero e uma string de caracteres usando o operador <code>+<\/code> resulta em um erro runtime, pois o TypeScript imp\u00f5e uma verifica\u00e7\u00e3o rigorosa do tipo.<\/p>\n<p>Isso ajuda a detectar poss\u00edveis erros relacionados a tipos antes de executar o c\u00f3digo, resultando em um c\u00f3digo mais robusto e livre de erros.<\/p>\n<h3>2. Digita\u00e7\u00e3o opcional<\/h3>\n<p>O TypeScript oferece flexibilidade para que voc\u00ea escolha usar ou n\u00e3o a digita\u00e7\u00e3o est\u00e1tica. Isso significa que voc\u00ea pode optar por especificar tipos para vari\u00e1veis e par\u00e2metros de fun\u00e7\u00e3o ou deixar o TypeScript inferir os tipos automaticamente com base no valor atribu\u00eddo.<\/p>\n<p>Por exemplo:<\/p>\n<pre><code class=\"language-typescript\">let num1: number = 10; \/\/ num1 is statically typed as a number\nlet num2 = \"20\"; \/\/ num2 is dynamically typed as a string\n\nlet result = num1 + num2; \/\/ Error: Operator '+' cannot be applied to types 'number' and 'string'<\/code><\/pre>\n<p>Neste c\u00f3digo, o tipo de <code>num2<\/code> \u00e9 inferido como <code>string<\/code> com base no valor atribu\u00eddo, mas voc\u00ea pode optar por especificar o tipo, se desejar.<\/p>\n<p>Voc\u00ea tamb\u00e9m pode definir o tipo como <code>any<\/code>, o que significa que ele aceita qualquer tipo de valor:<\/p>\n<pre><code class=\"language-typescript\">let num1: number = 10;\nlet num2: any = \"20\";\n\nlet result = num1 + num2; \/\/ Error: Operator '+' cannot be applied to types 'number' and 'string'<\/code><\/pre>\n<h3>3. Recursos ES6+<\/h3>\n<p>O TypeScript oferece suporte para recursos modernos de JavaScript, incluindo aqueles introduzidos no ECMAScript 6 (ES6) e vers\u00f5es posteriores.<\/p>\n<p>Isso permite que os desenvolvedores escrevam c\u00f3digos mais limpos e expressivos usando recursos como fun\u00e7\u00f5es de seta, desestrutura\u00e7\u00e3o, <a href=\"https:\/\/kinsta.com\/pt\/blog\/javascript-react\/#template-literals\">literais de modelo<\/a> e muito mais, com verifica\u00e7\u00e3o de tipo adicional.<\/p>\n<p>Por exemplo:<\/p>\n<pre><code class=\"language-typescript\">const greeting = (name: string): string =&gt; {\n  return `Hello, ${name}!`; \/\/ Use of arrow function and template literal\n};\n\nconsole.log(greeting(\"John\")); \/\/ Output: Hello, John!<\/code><\/pre>\n<p>Neste c\u00f3digo, a fun\u00e7\u00e3o de seta e o literal de modelo s\u00e3o usados perfeitamente. O mesmo se aplica a toda a sintaxe do JavaScript.<\/p>\n<h3>4. Organiza\u00e7\u00e3o do c\u00f3digo<\/h3>\n<p>No JavaScript, a organiza\u00e7\u00e3o do c\u00f3digo em arquivos separados e o gerenciamento de depend\u00eancias podem se tornar um desafio \u00e0 medida que a base de c\u00f3digo cresce. No entanto, o TypeScript oferece suporte integrado para m\u00f3dulos e namespaces para que voc\u00ea organize melhor o c\u00f3digo.<\/p>\n<p>Os m\u00f3dulos permitem o encapsulamento do c\u00f3digo em arquivos separados, facilitando o gerenciamento e a manuten\u00e7\u00e3o de grandes bases de c\u00f3digo.<\/p>\n<p>Aqui est\u00e1 um exemplo:<\/p>\n<pre><code class=\"language-typescript\">\/\/ greeting.ts:\nexport function greet(name: string): string { \/\/ Export a function from a module\n  return `Hello, ${name}!`;\n}\n\n\/\/ app.ts:\nimport { greet } from \".\/greeting\"; \/\/ Import from a module\n\nconsole.log(greet(\"John\")); \/\/ Output: Hello, John!<\/code><\/pre>\n<p>No exemplo acima, temos dois arquivos separados: <strong>greeting.ts<\/strong> e <strong>app.ts<\/strong>. O arquivo <strong>app.ts<\/strong> importa a fun\u00e7\u00e3o <code>greet<\/code> do arquivo <strong>greeting.ts<\/strong> usando a instru\u00e7\u00e3o <code>import<\/code>. O arquivo <strong>greeting.ts<\/strong> exporta a fun\u00e7\u00e3o <code>greet<\/code> usando a palavra-chave <code>export<\/code>, tornando acess\u00edvel para importa\u00e7\u00e3o em outros arquivos.<\/p>\n<p>Isso permite uma melhor organiza\u00e7\u00e3o do c\u00f3digo e a separa\u00e7\u00e3o das preocupa\u00e7\u00f5es, facilitando o gerenciamento e a manuten\u00e7\u00e3o de grandes bases de c\u00f3digo.<\/p>\n<p>Os namespaces no TypeScript oferecem uma maneira de agrupar c\u00f3digos relacionados e evitar a polui\u00e7\u00e3o global de namespaces. Eles podem ser usados para definir um cont\u00eainer para um conjunto de classes, interfaces, fun\u00e7\u00f5es ou vari\u00e1veis relacionadas.<\/p>\n<p>Aqui est\u00e1 um exemplo:<\/p>\n<pre><code class=\"language-typescript\">namespace Utilities {\n  export function greet(name: string): string {\n    return `Hello, ${name}!`;\n  }\n  \n  export function capitalize(str: string): string {\n    return str.toUpperCase();\n  }\n}\n\nconsole.log(Utilities.greet(\"John\")); \/\/ Output: Hello, John!\nconsole.log(Utilities.capitalize(\"hello\")); \/\/ Output: HELLO<\/code><\/pre>\n<p>Neste c\u00f3digo, definimos um <code>namespace Utilities<\/code> que cont\u00e9m duas fun\u00e7\u00f5es, <code>greet<\/code> e <code>capitalize<\/code>. Podemos acessar essas fun\u00e7\u00f5es usando o nome do namespace seguido do nome da fun\u00e7\u00e3o, fornecendo um agrupamento l\u00f3gico para o c\u00f3digo relacionado.<\/p>\n<h3>5. Recursos de programa\u00e7\u00e3o orientada a objetos (OOP)<\/h3>\n<p>O TypeScript oferece suporte a conceitos de <a href=\"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/\">OOP<\/a>, como classes, interfaces e heran\u00e7a, o que permite que voc\u00ea tenha um c\u00f3digo estruturado e organizado.<\/p>\n<p>Por exemplo:<\/p>\n<pre><code class=\"language-typescript\">class Person {\n  constructor(public name: string) {} \/\/ Define a class with a constructor\n  greet(): string { \/\/ Define a method in a class\n    return `Hello, my name is ${this.name}!`;\n  }\n}\n\nconst john = new Person(\"John\"); \/\/ Create an instance of the class\nconsole.log(john.greet()); \/\/ Output: Hello, my name is John!<\/code><\/pre>\n<h3>6. Sistema de tipos avan\u00e7ado<\/h3>\n<p>O TypeScript oferece um sistema de tipos avan\u00e7ado que suporta gen\u00e9ricos, uni\u00f5es, interse\u00e7\u00f5es e muito mais. Esses recursos aprimoram os recursos de verifica\u00e7\u00e3o de tipos est\u00e1ticos do TypeScript, permitindo que os desenvolvedores escrevam c\u00f3digos mais robustos e expressivos.<\/p>\n<p><strong>Gen\u00e9ricos:<\/strong> Os gen\u00e9ricos permitem escrever c\u00f3digo reutiliz\u00e1vel que pode funcionar com diferentes tipos. Os gen\u00e9ricos s\u00e3o como espa\u00e7os reservados para tipos determinados em tempo de execu\u00e7\u00e3o com base nos valores passados para uma fun\u00e7\u00e3o ou uma classe.<\/p>\n<p>Por exemplo, vamos definir uma fun\u00e7\u00e3o gen\u00e9rica identity que recebe um valor de argumento do tipo <code>T<\/code> e retorna um valor do mesmo tipo <code>T<\/code>:<\/p>\n<pre><code class=\"language-typescript\">function identity(value: T): T {\n  return value;\n}\n\nlet num: number = identity(10); \/\/ T is inferred as number\nlet str: string = identity(\"hello\"); \/\/ T is inferred as string<\/code><\/pre>\n<p>No exemplo acima, o tipo <code>T<\/code> \u00e9 inferido com base no tipo de valor passado para a fun\u00e7\u00e3o. No primeiro uso da fun\u00e7\u00e3o identity, <code>T<\/code> \u00e9 inferido como um n\u00famero porque passamos <code>10<\/code> como argumento e, no segundo uso, <code>T<\/code> \u00e9 inferido como uma string de caracteres porque passamos <code>\"hello\"<\/code> como argumento.<\/p>\n<p><strong>Uni\u00f5es e interse\u00e7\u00f5es:<\/strong> As uni\u00f5es e interse\u00e7\u00f5es s\u00e3o usadas para compor tipos e criar rela\u00e7\u00f5es de tipos mais complexas.<\/p>\n<p>As uni\u00f5es permitem a combina\u00e7\u00e3o de dois ou mais tipos em um \u00fanico tipo que pode ter qualquer um dos tipos combinados. As interse\u00e7\u00f5es permitem a combina\u00e7\u00e3o de dois ou mais tipos em um \u00fanico tipo que deve satisfazer todos os tipos combinados.<\/p>\n<p>Por exemplo, podemos definir dois tipos <code>Employee<\/code> e <code>Manager<\/code>, que representam um funcion\u00e1rio e um gerente, respectivamente.<\/p>\n<pre><code class=\"language-typescript\">type Employee = { name: string, role: string };\ntype Manager = { name: string, department: string };<\/code><\/pre>\n<p>Usando os tipos <code>Employee<\/code> e <code>Manager<\/code>, podemos definir um tipo de uni\u00e3o <code>EmployeeOrManager<\/code> que pode ser um <code>Employee<\/code> ou um <code>Manager<\/code>.<\/p>\n<pre><code class=\"language-typescript\">type EmployeeOrManager = Employee | Manager; \/\/ Union type\n\nlet person1: EmployeeOrManager = { name: \"John\", role: \"Developer\" }; \/\/ Can be either Employee or Manager<\/code><\/pre>\n<p>No c\u00f3digo acima, a vari\u00e1vel <code>person1<\/code> \u00e9 do tipo <code>EmployeeOrManager<\/code>, o que significa que voc\u00ea pode atribuir a ela um objeto que atenda ao tipo <code>Employee<\/code> ou <code>Manager<\/code>.<\/p>\n<p>Tamb\u00e9m podemos definir um tipo de interse\u00e7\u00e3o <code>EmployeeOrManager<\/code> que deve satisfazer os tipos <code>Employee<\/code> e <code>Manager<\/code>.<\/p>\n<pre><code class=\"language-typescript\">type EmployeeAndManager = Employee & Manager; \/\/ Intersection type\n\nlet person2: EmployeeAndManager = { name: \"Jane\", role: \"Manager\", department: \"HR\" }; \/\/ Must be both Employee and Manager<\/code><\/pre>\n<p>No c\u00f3digo acima, a vari\u00e1vel <code>person2<\/code> \u00e9 do tipo <code>EmployeeAndManager<\/code>, o que significa que ela deve ser um objeto que satisfa\u00e7a os tipos <code>Employee<\/code> e <code>Manager<\/code>.<\/p>\n<h3>7. Compatibilidade com JavaScript<\/h3>\n<p>O TypeScript foi projetado para ser um superconjunto do JavaScript, o que significa que qualquer c\u00f3digo JavaScript v\u00e1lido tamb\u00e9m \u00e9 um c\u00f3digo TypeScript v\u00e1lido. Isso facilita a integra\u00e7\u00e3o do TypeScript em projetos JavaScript existentes sem que voc\u00ea precise reescrever todo o c\u00f3digo.<\/p>\n<p>O TypeScript \u00e9 constru\u00eddo sobre o JavaScript, adicionando digita\u00e7\u00e3o est\u00e1tica opcional e recursos adicionais, mas ainda permite que voc\u00ea use o c\u00f3digo JavaScript simples como est\u00e1.<\/p>\n<p>Por exemplo, se voc\u00ea tiver um arquivo JavaScript <strong>app.js<\/strong>, poder\u00e1 renome\u00e1-lo para <strong>app.ts<\/strong> e come\u00e7ar a usar os recursos do TypeScript gradualmente, sem alterar o c\u00f3digo JavaScript existente. O TypeScript ainda ser\u00e1 capaz de entender e compilar o c\u00f3digo JavaScript como TypeScript v\u00e1lido.<\/p>\n<p>Aqui est\u00e1 um exemplo de como o TypeScript fornece uma integra\u00e7\u00e3o perfeita com o JavaScript:<\/p>\n<pre><code class=\"language-js\">\/\/ app.js - Existing JavaScript code\nfunction greet(name) {\n  return \"Hello, \" + name + \"!\";\n}\n\nconsole.log(greet(\"John\")); \/\/ Output: Hello, John!<\/code><\/pre>\n<p>Voc\u00ea pode renomear o arquivo JavaScript acima para <strong>app.ts<\/strong> e come\u00e7ar a usar os recursos do TypeScript:<\/p>\n<pre><code class=\"language-typescript\">\/\/ app.ts - Same JavaScript code as TypeScript\nfunction greet(name: string): string {\n  return \"Hello, \" + name + \"!\";\n}\n\nconsole.log(greet(\"John\")); \/\/ Output: Hello, John!<\/code><\/pre>\n<p>No exemplo acima, adicionamos uma anota\u00e7\u00e3o de tipo ao par\u00e2metro name, especificando como <code>string<\/code>, que \u00e9 opcional no TypeScript. O restante do c\u00f3digo permanece igual ao JavaScript. O TypeScript \u00e9 capaz de entender o c\u00f3digo JavaScript e fornecer verifica\u00e7\u00e3o de tipo para a anota\u00e7\u00e3o de tipo adicionada, facilitando a ado\u00e7\u00e3o gradual do TypeScript em um projeto JavaScript existente.<\/p>\n<h2>Primeiros passos com o TypeScript<\/h2>\n<p>O TypeScript \u00e9 um compilador oficial que voc\u00ea pode instalar em seu projeto usando o <a href=\"https:\/\/kinsta.com\/pt\/blog\/npm-gerenciador-pacotes-node\/\">npm<\/a>. Se quiser come\u00e7ar a usar o TypeScript 5.0 em seu projeto, voc\u00ea pode executar o seguinte comando no diret\u00f3rio do projeto:<\/p>\n<pre><code class=\"language-bash\">npm install -D typescript<\/code><\/pre>\n<p>Isso instalar\u00e1 o compilador no diret\u00f3rio <strong>node_modules<\/strong>, que agora voc\u00ea pode executar com o comando <code>npx tsc<\/code>.<\/p>\n<p>Para o seu projeto JavaScript, voc\u00ea precisar\u00e1 primeiro inicializar um projeto node usando o seguinte comando para criar um arquivo package.json:<\/p>\n<pre><code class=\"language-bash\">npm init -y<\/code><\/pre>\n<p>Em seguida, voc\u00ea pode instalar a depend\u00eancia do TypeScript, criar arquivos TypeScript usando a extens\u00e3o <strong>.ts<\/strong> e escrever seu c\u00f3digo TypeScript.<\/p>\n<p>Ap\u00f3s escrever o c\u00f3digo do TypeScript, voc\u00ea precisar\u00e1 compilar para JavaScript usando o compilador do TypeScript (<code>tsc<\/code>). Voc\u00ea pode executar o seguinte comando no diret\u00f3rio do projeto:<\/p>\n<pre><code class=\"language-bash\">npx tsc .ts<\/code><\/pre>\n<p>Isso compila o c\u00f3digo TypeScript no arquivo especificado para JavaScript e gera um arquivo <strong>.js<\/strong> com o mesmo nome.<\/p>\n<p>Voc\u00ea pode ent\u00e3o executar o c\u00f3digo JavaScript compilado em seu projeto, da mesma forma que executaria um c\u00f3digo JavaScript normal. Voc\u00ea pode usar o Node.js para executar o c\u00f3digo JavaScript em um ambiente <a href=\"https:\/\/kinsta.com\/pt\/blog\/salario-desenvolvedor-node-js\/\">Node.js<\/a> ou incluir o arquivo JavaScript compilado em um arquivo <a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-html\/\">HTML<\/a> e execut\u00e1-lo em um navegador.<\/p>\n<h2>Trabalho com interfaces<\/h2>\n<p>As interfaces no TypeScript s\u00e3o usadas para definir contratos ou formas de objetos. Elas permitem que voc\u00ea especifique a estrutura ou a forma com a qual um objeto deve estar em conformidade.<\/p>\n<p>As interfaces definem um conjunto de propriedades e\/ou m\u00e9todos que um objeto deve ter para ser considerado compat\u00edvel com a interface. As interfaces podem ser usadas para fornecer anota\u00e7\u00f5es de tipo para objetos, par\u00e2metros de fun\u00e7\u00e3o e valores de retorno, permitindo uma melhor verifica\u00e7\u00e3o de tipo est\u00e1tico e sugest\u00f5es de conclus\u00e3o de c\u00f3digo nos <a href=\"https:\/\/kinsta.com\/pt\/blog\/php-editor\/\">IDEs<\/a>.<\/p>\n<p>Aqui est\u00e1 um exemplo de uma interface no TypeScript:<\/p>\n<pre><code class=\"language-typescript\">interface Person {\n  firstName: string;\n  lastName: string;\n  age: number;\n}<\/code><\/pre>\n<p>Neste exemplo, definimos uma interface <code>Person<\/code> que especifica tr\u00eas propriedades: <code>firstName<\/code> do tipo <code>string<\/code>, <code>lastName<\/code> do tipo <code>string<\/code> e <code>age<\/code> do tipo <code>number<\/code>.<\/p>\n<p>Qualquer objeto que tenha essas tr\u00eas propriedades com os tipos especificados ser\u00e1 considerado compat\u00edvel com a interface <code>Person<\/code>. Vamos agora definir os objetos que est\u00e3o em conformidade com a interface <code>Person<\/code>:<\/p>\n<pre><code class=\"language-typescript\">let person1: Person = {\n  firstName: \"John\",\n  lastName: \"Doe\",\n  age: 30\n};\n\nlet person2: Person = {\n  firstName: \"Jane\",\n  lastName: \"Doe\",\n  age: 25\n};<\/code><\/pre>\n<p>Neste exemplo, criamos dois objetos <code>person1<\/code> e <code>person2<\/code> que est\u00e3o em conformidade com a interface <code>Person<\/code>. Ambos os objetos t\u00eam as propriedades necess\u00e1rias <code>firstName<\/code>, <code>lastName<\/code> e <code>age<\/code> com os tipos especificados, portanto s\u00e3o compat\u00edveis com a interface <code>Person<\/code>.<\/p>\n<h3>Extens\u00e3o de interfaces<\/h3>\n<p>As interfaces tamb\u00e9m podem ser estendidas para criar novas interfaces que herdam propriedades de interfaces existentes.<\/p>\n<p>Por exemplo:<\/p>\n<pre><code class=\"language-typescript\">interface Animal {\n  name: string;\n  sound: string;\n}\n\ninterface Dog extends Animal {\n  breed: string;\n}\n\nlet dog: Dog = {\n  name: \"Buddy\",\n  sound: \"Woof\",\n  breed: \"Labrador\"\n};<\/code><\/pre>\n<p>Neste exemplo, definimos uma interface <code>Animal<\/code> com as propriedades <code>name<\/code> e <code>sound<\/code> e, em seguida, definimos uma nova interface &#8220;Dog&#8221; que estende a interface <code>Animal<\/code> e adiciona uma nova propriedade<code>breed<\/code>. A interface <code>Dog<\/code> herda as propriedades da interface <code>Animal<\/code>, portanto, qualquer objeto que esteja em conformidade com a interface <code>Dog<\/code> tamb\u00e9m deve ter as propriedades <code>name<\/code> e <code>sound<\/code>.<\/p>\n<h3>Propriedades opcionais<\/h3>\n<p>As interfaces tamb\u00e9m podem ter propriedades opcionais, que s\u00e3o indicadas por um <code>?<\/code> ap\u00f3s o nome da propriedade.<\/p>\n<p>Aqui est\u00e1 um exemplo:<\/p>\n<pre><code class=\"language-typescript\">interface Car {\n  make: string;\n  model: string;\n  year?: number;\n}\n\nlet car1: Car = {\n  make: \"Toyota\",\n  model: \"Camry\"\n};\n\nlet car2: Car = {\n  make: \"Honda\",\n  model: \"Accord\",\n  year: 2020\n};<\/code><\/pre>\n<p>Neste exemplo, definimos uma interface <code>Car<\/code> com as propriedades <code>make<\/code> e <code>model<\/code>, e uma propriedade opcional <code>year<\/code>. A propriedade <code>year<\/code> n\u00e3o \u00e9 obrigat\u00f3ria, portanto, os objetos que est\u00e3o em conformidade com a interface <code>Car<\/code> podem t\u00ea-la ou n\u00e3o.<\/p>\n<h2>Verifica\u00e7\u00e3o avan\u00e7ada de tipos<\/h2>\n<p>O TypeScript tamb\u00e9m fornece op\u00e7\u00f5es avan\u00e7adas para verifica\u00e7\u00e3o de tipos no <strong>tsconfig.json<\/strong>. Essas op\u00e7\u00f5es podem aprimorar os recursos de verifica\u00e7\u00e3o de tipo do seu projeto TypeScript e detectar poss\u00edveis erros no runtime, resultando em um c\u00f3digo mais robusto e confi\u00e1vel.<\/p>\n<h3>1. strictNullChecks<\/h3>\n<p>Quando definido como <code>true<\/code>, o TypeScript imp\u00f5e verifica\u00e7\u00f5es nulas rigorosas, o que significa que as vari\u00e1veis n\u00e3o podem ter um valor <code>null<\/code> ou <code>undefined<\/code>, a menos que sejam explicitamente especificadas com o tipo de uni\u00e3o de <code>null<\/code> ou <code>undefined<\/code>.<\/p>\n<p>Por exemplo:<\/p>\n<pre><code class=\"language-json\">{\n  \"compilerOptions\": {\n    \"strictNullChecks\": true\n  }\n}<\/code><\/pre>\n<p>Com essa op\u00e7\u00e3o ativada, o TypeScript detectar\u00e1 poss\u00edveis valores <code>null<\/code> ou <code>undefined<\/code> no runtime, ajudando a evitar erros de tempo de execu\u00e7\u00e3o causados pelo acesso a propriedades ou m\u00e9todos em vari\u00e1veis \u2063, <code>null<\/code> ou <code>undefined<\/code>.<\/p>\n<pre><code class=\"language-typescript\">\/\/ Example 1: Error - Object is possibly 'null'\nlet obj1: { prop: string } = null;\nconsole.log(obj1.prop);\n\n\/\/ Example 2: Error - Object is possibly 'undefined'\nlet obj2: { prop: string } = undefined;\nconsole.log(obj2.prop);<\/code><\/pre>\n<h3>2. strictFunctionTypes<\/h3>\n<p>Quando definido como <code>true<\/code>, o TypeScript ativa a verifica\u00e7\u00e3o rigorosa dos tipos de fun\u00e7\u00e3o, incluindo a bivari\u00e2ncia de par\u00e2metros de fun\u00e7\u00e3o, o que garante que os argumentos da fun\u00e7\u00e3o sejam rigorosamente verificados quanto \u00e0 compatibilidade de tipos.<\/p>\n<p>Por exemplo:<\/p>\n<pre><code class=\"language-json\">{\n  \"compilerOptions\": {\n    \"strictFunctionTypes\": true\n  }\n}<\/code><\/pre>\n<p>Com essa op\u00e7\u00e3o ativada, o TypeScript detectar\u00e1 poss\u00edveis incompatibilidades de tipo de par\u00e2metro de fun\u00e7\u00e3o no runtime, ajudando a evitar erros de tempo de execu\u00e7\u00e3o causados pela passagem de argumentos incorretos para fun\u00e7\u00f5es.<\/p>\n<pre><code class=\"language-typescript\">\/\/ Example: Error - Argument of type 'number' is not assignable to parameter of type 'string'\nfunction greet(name: string) {\n  console.log(`Hello, ${name}!`);\n}\n\ngreet(123);<\/code><\/pre>\n<h3>3. noImplicitThis<\/h3>\n<p>Quando definido como <code>true<\/code>, o TypeScript n\u00e3o permite o uso de <code>this<\/code> com um tipo <code>any<\/code> impl\u00edcito, ajudando a detectar poss\u00edveis erros ao usar <code>this<\/code> em m\u00e9todos de classe.<\/p>\n<p>Por exemplo:<\/p>\n<pre><code class=\"language-json\">{\n  \"compilerOptions\": {\n    \"noImplicitThis\": true\n  }\n}<\/code><\/pre>\n<p>Com essa op\u00e7\u00e3o ativada, o TypeScript detectar\u00e1 poss\u00edveis erros causados pelo uso de <code>this<\/code> sem anota\u00e7\u00f5es de tipo adequadas ou vincula\u00e7\u00e3o em m\u00e9todos de classe.<\/p>\n<pre><code class=\"language-typescript\">\/\/ Example: Error - The 'this' context of type 'void' is not assignable to method's 'this' of type 'MyClass'\nclass MyClass {\n  private prop: string;\n\n  constructor(prop: string) {\n    this.prop = prop;\n  }\n\n  printProp() {\n    console.log(this.prop);\n  }\n}\n\nlet obj = new MyClass(\"Hello\");\nsetTimeout(obj.printProp, 1000); \/\/ 'this' context is lost, potential error<\/code><\/pre>\n<h3>4. target<\/h3>\n<p>A op\u00e7\u00e3o <code>target<\/code> especifica a vers\u00e3o de destino do ECMAScript para o seu c\u00f3digo TypeScript. Ela determina a vers\u00e3o do JavaScript que o compilador do TypeScript deve gerar como sa\u00edda.<\/p>\n<p>Por exemplo:<\/p>\n<pre><code class=\"language-json\">{\n  \"compilerOptions\": {\n    \"target\": \"ES2018\"\n  }\n}<\/code><\/pre>\n<p>Com essa op\u00e7\u00e3o definida como &#8220;<strong>ES2018<\/strong>&#8220;, o TypeScript ir\u00e1 gerar um c\u00f3digo JavaScript que est\u00e1 em conformidade com o padr\u00e3o ECMAScript 2018.<\/p>\n<p>Isso pode ser \u00fatil se voc\u00ea quiser aproveitar os recursos e a sintaxe mais recentes do JavaScript, mas tamb\u00e9m precisar garantir a compatibilidade com ambientes JavaScript mais antigos.<\/p>\n<h3>5. module<\/h3>\n<p>A op\u00e7\u00e3o <code>module<\/code> especifica o sistema de m\u00f3dulos a ser usado em seu c\u00f3digo TypeScript. As op\u00e7\u00f5es comuns incluem &#8220;<strong>CommonJS<\/strong>&#8220;, &#8220;<strong>AMD<\/strong>&#8220;, &#8220;<strong>ES6<\/strong>&#8220;, &#8220;<strong>ES2015<\/strong>&#8220;, etc. Isso determina como seus m\u00f3dulos TypeScript s\u00e3o compilados em m\u00f3dulos JavaScript.<\/p>\n<p>Por exemplo:<\/p>\n<pre><code class=\"language-json\">{\n  \"compilerOptions\": {\n    \"module\": \"ES6\"\n  }\n}<\/code><\/pre>\n<p>Com essa op\u00e7\u00e3o definida como &#8220;<strong>ES6<\/strong>&#8220;, o TypeScript ir\u00e1 gerar um c\u00f3digo JavaScript que usa a sintaxe do m\u00f3dulo ECMAScript 6.<\/p>\n<p>Isso pode ser \u00fatil se voc\u00ea estiver trabalhando com um ambiente JavaScript moderno que ofere\u00e7a suporte a m\u00f3dulos ECMAScript 6, como em um aplicativo de frontend usando um empacotador de m\u00f3dulos como o webpack ou o Rollup.<\/p>\n<h3>6. noUnusedLocals e noUnusedParameters<\/h3>\n<p>Essas op\u00e7\u00f5es permitem que o TypeScript capture vari\u00e1veis locais n\u00e3o utilizadas e par\u00e2metros de fun\u00e7\u00e3o, respectivamente.<\/p>\n<p>Quando definido como <code>true<\/code>, o TypeScript emitir\u00e1 erros de compila\u00e7\u00e3o para quaisquer vari\u00e1veis locais ou par\u00e2metros de fun\u00e7\u00e3o declarados, mas n\u00e3o usados no c\u00f3digo.<\/p>\n<p>Por exemplo:<\/p>\n<pre><code class=\"language-json\">{\n  \"compilerOptions\": {\n    \"noUnusedLocals\": true,\n    \"noUnusedParameters\": true\n  }\n}<\/code><\/pre>\n<p>Esses s\u00e3o apenas mais alguns exemplos de op\u00e7\u00f5es avan\u00e7adas de verifica\u00e7\u00e3o de tipo no arquivo <strong>tsconfig.json<\/strong> do TypeScript. Voc\u00ea pode consultar a <a href=\"https:\/\/www.typescriptlang.org\/tsconfig\">documenta\u00e7\u00e3o oficial para saber mais<\/a>.<\/p>\n<h2>Pr\u00e1ticas recomendadas e dicas para usar o TypeScript<\/h2>\n<h3>1. Anote corretamente os tipos de vari\u00e1veis, par\u00e2metros de fun\u00e7\u00f5es e valores de retorno<\/h3>\n<p>Um dos principais benef\u00edcios do TypeScript \u00e9 seu forte sistema de digita\u00e7\u00e3o, que permite que voc\u00ea especifique explicitamente os tipos de vari\u00e1veis, par\u00e2metros de fun\u00e7\u00e3o e valores de retorno.<\/p>\n<p>Isso melhora a legibilidade do c\u00f3digo, detecta antecipadamente poss\u00edveis erros relacionados a tipos e permite o preenchimento inteligente de c\u00f3digo nos IDEs.<\/p>\n<p>Aqui est\u00e1 um exemplo:<\/p>\n<pre><code class=\"language-typescript\">\/\/ Properly annotating variable types\nlet age: number = 25;\nlet name: string = \"John\";\nlet isStudent: boolean = false;\nlet scores: number[] = [98, 76, 89];\nlet person: { name: string, age: number } = { name: \"John\", age: 25 };\n\n\/\/ Properly annotating function parameter and return types\nfunction greet(name: string): string {\n  return \"Hello, \" + name;\n}\n\nfunction add(a: number, b: number): number {\n  return a + b;\n}<\/code><\/pre>\n<h3>2. Utilize os recursos avan\u00e7ados de tipo do TypeScript de forma eficaz<\/h3>\n<p>O TypeScript vem com um rico conjunto de recursos avan\u00e7ados de tipo, como gen\u00e9ricos, uni\u00f5es, interse\u00e7\u00f5es, tipos condicionais e tipos mapeados. Esses recursos podem ajudar voc\u00ea a escrever c\u00f3digos mais flex\u00edveis e reutiliz\u00e1veis.<\/p>\n<p>Aqui est\u00e1 um exemplo:<\/p>\n<pre><code class=\"language-typescript\">\/\/ Using generics to create a reusable function\nfunction identity(value: T): T {\n  return value;\n}\n\nlet num: number = identity(42); \/\/ inferred type: number\nlet str: string = identity(\"hello\"); \/\/ inferred type: string\n\n\/\/ Using union types to allow multiple types\nfunction display(value: number | string): void {\n  console.log(value);\n}\n\ndisplay(42); \/\/ valid\ndisplay(\"hello\"); \/\/ valid\ndisplay(true); \/\/ error<\/code><\/pre>\n<h3>3. Escreva c\u00f3digo sustent\u00e1vel e escal\u00e1vel com o TypeScript<\/h3>\n<p>O TypeScript incentiva a escrita de c\u00f3digo sustent\u00e1vel e escal\u00e1vel, fornecendo recursos como interfaces, classes e m\u00f3dulos.<\/p>\n<p>Aqui est\u00e1 um exemplo:<\/p>\n<pre><code class=\"language-typescript\">\/\/ Using interfaces for defining contracts\ninterface Person {\n  name: string;\n  age: number;\n}\n\nfunction greet(person: Person): string {\n  return \"Hello, \" + person.name;\n}\n\nlet john: Person = { name: \"John\", age: 25 };\nconsole.log(greet(john)); \/\/ \"Hello, John\"\n\n\/\/ Using classes for encapsulation and abstraction\nclass Animal {\n  constructor(private name: string, private species: string) {}\n\n  public makeSound(): void {\n    console.log(\"Animal is making a sound\");\n  }\n}\n\nclass Dog extends Animal {\n  constructor(name: string, breed: string) {\n    super(name, \"Dog\");\n    this.breed = breed;\n  }\n\n  public makeSound(): void {\n    console.log(\"Dog is barking\");\n  }\n}\n\nlet myDog: Dog = new Dog(\"Buddy\", \"Labrador\");\nmyDog.makeSound(); \/\/ \"Dog is barking\"<\/code><\/pre>\n<h3>4. Aproveite as ferramentas e suporte ao IDE do TypeScript<\/h3>\n<p>O TypeScript tem excelentes ferramentas e suporte para IDE, com recursos como preenchimento autom\u00e1tico, infer\u00eancia de tipos, refatora\u00e7\u00e3o e verifica\u00e7\u00e3o de erros.<\/p>\n<p>Aproveite esses recursos para aumentar sua produtividade e detectar poss\u00edveis erros no in\u00edcio do processo de desenvolvimento. Certifique-se de usar um IDE compat\u00edvel com o TypeScript, como o Visual Studio Code, e instale o <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ms-vscode.vscode-typescript-next\">plugin do TypeScript<\/a> para obter uma melhor experi\u00eancia de edi\u00e7\u00e3o de c\u00f3digo.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/04\/vscode-extension-typescript.jpg\" alt=\"Extens\u00e3o TypeScript do VS Code\" width=\"1600\" height=\"877\"><figcaption class=\"wp-caption-text\">Extens\u00e3o TypeScript do VS Code<\/figcaption><\/figure>\n\n<h2>Resumo<\/h2>\n<p>O TypeScript oferece uma ampla gama de recursos avan\u00e7ados que podem melhorar muito seus projetos de desenvolvimento da web.<\/p>\n<p>Sua forte digita\u00e7\u00e3o est\u00e1tica, seu sistema de tipos avan\u00e7ado e seus recursos de programa\u00e7\u00e3o orientada a objetos fazem dele uma ferramenta valiosa para escrever c\u00f3digos robustos, escalon\u00e1veis e de f\u00e1cil manuten\u00e7\u00e3o. As ferramentas e o suporte ao IDE do TypeScript tamb\u00e9m proporcionam uma experi\u00eancia de desenvolvimento perfeita.<\/p>\n<p>Se quiser explorar o TypeScript e seus recursos, voc\u00ea pode fazer isso hoje mesmo, gra\u00e7as \u00e0 <a href=\"https:\/\/sevalla.com\/application-hosting\/\">hospedagem de aplicativos da Kinsta<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>No cen\u00e1rio digital acelerado de hoje, o JavaScript se tornou a linguagem preferida para construir aplicativos web din\u00e2micas. No entanto, a digita\u00e7\u00e3o din\u00e2mica do JavaScript \u00e0s &#8230;<\/p>\n","protected":false},"author":287,"featured_media":59739,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[978],"class_list":["post-59738","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-tutoriais-javascript"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>O Que \u00e9 TypeScript? Um Guia Abrangente - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Descubra tudo o que voc\u00ea precisa saber sobre TypeScript neste guia abrangente, incluindo suas caracter\u00edsticas, vantagens e melhores pr\u00e1ticas.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"O Que \u00e9 TypeScript? Um Guia Abrangente\" \/>\n<meta property=\"og:description\" content=\"Descubra tudo o que voc\u00ea precisa saber sobre TypeScript neste guia abrangente, incluindo suas caracter\u00edsticas, vantagens e melhores pr\u00e1ticas.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-01T17:35:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-01T20:02:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/what-is-typescript.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"3042\" \/>\n\t<meta property=\"og:image:height\" content=\"1521\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Joel Olawanle\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Descubra tudo o que voc\u00ea precisa saber sobre TypeScript neste guia abrangente, incluindo suas caracter\u00edsticas, vantagens e melhores pr\u00e1ticas.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/what-is-typescript.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@olawanle_joel\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"O Que \u00e9 TypeScript? Um Guia Abrangente\",\"datePublished\":\"2023-08-01T17:35:37+00:00\",\"dateModified\":\"2025-10-01T20:02:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/\"},\"wordCount\":3225,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/what-is-typescript.jpeg\",\"inLanguage\":\"pt-PT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/\",\"name\":\"O Que \u00e9 TypeScript? Um Guia Abrangente - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/what-is-typescript.jpeg\",\"datePublished\":\"2023-08-01T17:35:37+00:00\",\"dateModified\":\"2025-10-01T20:02:02+00:00\",\"description\":\"Descubra tudo o que voc\u00ea precisa saber sobre TypeScript neste guia abrangente, incluindo suas caracter\u00edsticas, vantagens e melhores pr\u00e1ticas.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/what-is-typescript.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/what-is-typescript.jpeg\",\"width\":3042,\"height\":1521},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutoriais de JavaScript\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/tutoriais-javascript\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"O Que \u00e9 TypeScript? Um Guia Abrangente\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"caption\":\"Joel Olawanle\"},\"description\":\"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.\",\"sameAs\":[\"https:\/\/joelolawanle.com\/\",\"https:\/\/www.linkedin.com\/in\/olawanlejoel\/\",\"https:\/\/x.com\/olawanle_joel\",\"https:\/\/www.youtube.com\/@joelolawanle\"],\"gender\":\"male\",\"knowsAbout\":[\"JavaScript\",\"React\",\"Next.js\"],\"knowsLanguage\":[\"English\"],\"jobTitle\":\"Technical Editor\",\"worksFor\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"O Que \u00e9 TypeScript? Um Guia Abrangente - Kinsta\u00ae","description":"Descubra tudo o que voc\u00ea precisa saber sobre TypeScript neste guia abrangente, incluindo suas caracter\u00edsticas, vantagens e melhores pr\u00e1ticas.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/","og_locale":"pt_PT","og_type":"article","og_title":"O Que \u00e9 TypeScript? Um Guia Abrangente","og_description":"Descubra tudo o que voc\u00ea precisa saber sobre TypeScript neste guia abrangente, incluindo suas caracter\u00edsticas, vantagens e melhores pr\u00e1ticas.","og_url":"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2023-08-01T17:35:37+00:00","article_modified_time":"2025-10-01T20:02:02+00:00","og_image":[{"width":3042,"height":1521,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/what-is-typescript.jpeg","type":"image\/jpeg"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"Descubra tudo o que voc\u00ea precisa saber sobre TypeScript neste guia abrangente, incluindo suas caracter\u00edsticas, vantagens e melhores pr\u00e1ticas.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/what-is-typescript.jpeg","twitter_creator":"@olawanle_joel","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Joel Olawanle","Tempo estimado de leitura":"18 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"O Que \u00e9 TypeScript? Um Guia Abrangente","datePublished":"2023-08-01T17:35:37+00:00","dateModified":"2025-10-01T20:02:02+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/"},"wordCount":3225,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/what-is-typescript.jpeg","inLanguage":"pt-PT"},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/","url":"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/","name":"O Que \u00e9 TypeScript? Um Guia Abrangente - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/what-is-typescript.jpeg","datePublished":"2023-08-01T17:35:37+00:00","dateModified":"2025-10-01T20:02:02+00:00","description":"Descubra tudo o que voc\u00ea precisa saber sobre TypeScript neste guia abrangente, incluindo suas caracter\u00edsticas, vantagens e melhores pr\u00e1ticas.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/what-is-typescript.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/what-is-typescript.jpeg","width":3042,"height":1521},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Tutoriais de JavaScript","item":"https:\/\/kinsta.com\/pt\/topicos\/tutoriais-javascript\/"},{"@type":"ListItem","position":3,"name":"O Que \u00e9 TypeScript? Um Guia Abrangente"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","caption":"Joel Olawanle"},"description":"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.","sameAs":["https:\/\/joelolawanle.com\/","https:\/\/www.linkedin.com\/in\/olawanlejoel\/","https:\/\/x.com\/olawanle_joel","https:\/\/www.youtube.com\/@joelolawanle"],"gender":"male","knowsAbout":["JavaScript","React","Next.js"],"knowsLanguage":["English"],"jobTitle":"Technical Editor","worksFor":"Kinsta","url":"https:\/\/kinsta.com\/pt\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/59738","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=59738"}],"version-history":[{"count":10,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/59738\/revisions"}],"predecessor-version":[{"id":67685,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/59738\/revisions\/67685"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59738\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59738\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59738\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59738\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59738\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59738\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59738\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59738\/translations\/es"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59738\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/59739"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=59738"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=59738"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=59738"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}