{"id":58945,"date":"2023-09-02T08:28:40","date_gmt":"2023-09-02T11:28:40","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=58945&#038;preview=true&#038;preview_id=58945"},"modified":"2023-09-20T07:35:12","modified_gmt":"2023-09-20T10:35:12","slug":"typescript-5-0","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/","title":{"rendered":"O que H\u00e1 de Novo no TypeScript 5.0: Declaradores, Const Type, Melhoria do Enums, Velocidade, e Muito Mais!"},"content":{"rendered":"<p>O TypeScript 5.0 foi lan\u00e7ado oficialmente em 16 de mar\u00e7o de 2023 e j\u00e1 est\u00e1 dispon\u00edvel para todo mundo usar. A nova vers\u00e3o traz um monte de recursos in\u00e9ditos com o foco em deixar o TypeScript mais leve, f\u00e1cil de usar e r\u00e1pido.<\/p>\n<p>Este novo lan\u00e7amento moderniza os decoradores para personaliza\u00e7\u00e3o de classes, permitindo a personaliza\u00e7\u00e3o das classes e seus membros de uma forma reutiliz\u00e1vel. <a href=\"https:\/\/kinsta.com\/pt\/blog\/tipos-de-desenvolvedores\/\">Os desenvolvedores<\/a> podem agora adicionar um modificador de const a uma declara\u00e7\u00e3o de par\u00e2metro de tipo, permitindo que infer\u00eancias do const type sejam o padr\u00e3o. A nova vers\u00e3o tamb\u00e9m faz com que todos os enums unam enums, simplificando a estrutura do c\u00f3digo e acelerando a experi\u00eancia do TypeScript.<\/p>\n<p>Neste artigo, voc\u00ea ir\u00e1 explorar as mudan\u00e7as introduzidas no TypeScript 5.0, fornecendo uma vis\u00e3o detalhada de suas novas caracter\u00edsticas e capacidades.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Como come\u00e7ar com o TypeScript 5.0<\/h2>\n<p>O TypeScript \u00e9 um compilador oficial que voc\u00ea pode instalar em seu projeto usando <a href=\"https:\/\/kinsta.com\/pt\/blog\/npm-gerenciador-pacotes-node\/\">npm<\/a>. Se voc\u00ea quiser come\u00e7ar a usar o TypeScript 5.0 em seu projeto, voc\u00ea pode executar o seguinte comando no diret\u00f3rio do seu 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 rodar usando o comando <code>npx tsc<\/code>.<\/p>\n<p>Voc\u00ea tamb\u00e9m pode encontrar instru\u00e7\u00f5es sobre o uso da nova vers\u00e3o do TypeScript no <a href=\"https:\/\/code.visualstudio.com\/docs\/typescript\/typescript-compiling#_using-the-workspace-version-of-typescript\" target=\"_blank\" rel=\"noopener noreferrer\">Visual Studio Code nesta documenta\u00e7\u00e3o<\/a>.<\/p>\n\n<h2>O que h\u00e1 de novo no TypeScript 5.0?<\/h2>\n<p>Neste artigo, vamos explorar 5 grandes atualiza\u00e7\u00f5es introduzidas no TypeScript. Esses recursos incluem:<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"decimal\" selector=\"h3\" count-number=\"-1\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>Decoradores modernizados<\/h3>\n<p>Os decoradores j\u00e1 existem no TypeScript h\u00e1 algum tempo sob uma bandeira experimental, mas a nova vers\u00e3o os atualiza com a proposta do ECMAScript, que agora est\u00e1 no <a href=\"https:\/\/github.com\/tc39\/proposal-decorators\" target=\"_blank\" rel=\"noopener noreferrer\">est\u00e1gio 3<\/a>, o que significa que est\u00e1 em um est\u00e1gio em que \u00e9 adicionado ao TypeScript.<\/p>\n<p>Os decoradores s\u00e3o uma forma de personalizar o comportamento de classes e seus membros de uma maneira reutiliz\u00e1vel. Por exemplo, se voc\u00ea tem uma classe que possui dois m\u00e9todos, <code>greet<\/code> e <code>getAge<\/code>:<\/p>\n<pre><code class=\"language-typescript\">class Person {\n    name: string;\n    age: number;\n    constructor(name: string, age: number) {\n        this.name = name;\n        this.age = age;\n    }\n\n    greet() {\n        console.log(`Hello, my name is ${this.name}.`);\n    }\n\n    getAge() {\n        console.log(`I am ${this.age} years old.`);\n    }\n}\n\nconst p = new Person('Ron', 30);\np.greet();\np.getAge();<\/code><\/pre>\n<p>Em casos de uso do mundo real, essa classe deveria ter m\u00e9todos mais complexos que lidam com alguma l\u00f3gica ass\u00edncrona com efeitos colaterais, etc., onde voc\u00ea gostaria de incluir alguns comandos <code>console.log<\/code> para depurar os m\u00e9todos.<\/p>\n<pre><code class=\"language-typescript\">class Person {\n    name: string;\n    age: number;\n    constructor(name: string, age: number) {\n        this.name = name;\n        this.age = age;\n    }\n\n    greet() {\n        console.log('LOG: Method Execution Starts.');\n        console.log(`Hello, my name is ${this.name}.`);\n        console.log('LOG: Method Execution Ends.');\n    }\n\n    getAge() {\n        console.log('LOG: Method Execution Starts.');\n        console.log(`I am ${this.age} years old.`);\n        console.log('Method Execution Ends.');\n    }\n}\n\nconst p = new Person('Ron', 30);\np.greet();\np.getAge();<\/code><\/pre>\n<p>Esse \u00e9 um padr\u00e3o que ocorre frequentemente, e seria conveniente ter uma solu\u00e7\u00e3o para aplicar a cada m\u00e9todo.<\/p>\n<p>\u00c9 aqui que os decoradores entram em cena. Podemos definir uma fun\u00e7\u00e3o chamada <code>debugMethod<\/code> que seria assim:<\/p>\n<pre><code class=\"language-typescript\">function debugMethod(originalMethod: any, context: any) {\n    function replacementMethod(this: any, ...args: any[]) {\n        console.log('Method Execution Starts.');\n        const result = originalMethod.call(this, ...args);\n        console.log('Method Execution Ends.');\n        return result;\n    }\n    return replacementMethod;\n}<\/code><\/pre>\n<p>No c\u00f3digo acima, o <code>debugMethod<\/code> recebe o m\u00e9todo original (<code>originalMethod<\/code>) e retorna uma fun\u00e7\u00e3o que faz o seguinte:<\/p>\n<ol start=\"1\">\n<li>Registra uma mensagem &#8220;In\u00edcio da execu\u00e7\u00e3o do m\u00e9todo.&#8221;<\/li>\n<li>Passa o m\u00e9todo original e todos os seus argumentos (incluindo this).<\/li>\n<li>Registra uma mensagem &#8220;Fim da execu\u00e7\u00e3o do m\u00e9todo.&#8221;<\/li>\n<li>Retorna o que o m\u00e9todo original retornou.<\/li>\n<\/ol>\n<p>Usando decoradores, voc\u00ea pode aplicar o <code>debugMethod<\/code> aos seus m\u00e9todos como mostrado no c\u00f3digo abaixo:<\/p>\n<pre><code class=\"language-typescript\">class Person {\n    name: string;\n    age: number;\n    constructor(name: string, age: number) {\n        this.name = name;\n        this.age = age;\n    }\n    @debugMethod\n    greet() {\n        console.log(`Hello, my name is ${this.name}.`);\n    }\n    @debugMethod\n    getAge() {\n        console.log(`I am ${this.age} years old.`);\n    }\n}\nconst p = new Person('Ron', 30);\np.greet();\np.getAge();<\/code><\/pre>\n<p>Isso ir\u00e1 resultar no seguinte:<\/p>\n<pre><code class=\"language-bash\">LOG: Entering method.\nHello, my name is Ron.\nLOG: Exiting method.\nLOG: Entering method.\nI am 30 years old.\nLOG: Exiting method.<\/code><\/pre>\n<p>Ao definir a fun\u00e7\u00e3o do decorador, chamado de (<code>debugMethod<\/code>), um segundo par\u00e2metro nomeado <code>context<\/code> \u00e9 inclu\u00eddo. Esse objeto de contexto cont\u00e9m informa\u00e7\u00f5es valiosas, como a forma como o m\u00e9todo decorado foi criado e o nome do m\u00e9todo em si. Voc\u00ea pode modificar o seu <code>debugMethod<\/code> para extrair o nome do m\u00e9todo diretamente desse objeto <code>context<\/code>:<\/p>\n<pre><code class=\"language-typescript\">function debugMethod(\n    originalMethod: any,\n    context: ClassMethodDecoratorContext\n) {\n    const methodName = String(context.name);\n    function replacementMethod(this: any, ...args: any[]) {\n        console.log(`'${methodName}' Execution Starts.`);\n        const result = originalMethod.call(this, ...args);\n        console.log(`'${methodName}' Execution Ends.`);\n        return result;\n    }\n    return replacementMethod;\n}<\/code><\/pre>\n<p>Quando voc\u00ea executar seu c\u00f3digo, a sa\u00edda agora ter\u00e1 o nome de cada m\u00e9todo decorado com o decorador <code>debugMethod<\/code>:<\/p>\n<pre><code class=\"language-bash\">'greet' Execution Starts.\nHello, my name is Ron.\n'greet' Execution Ends.\n'getAge' Execution Starts.\nI am 30 years old.\n'getAge' Execution Ends.<\/code><\/pre>\n<p>H\u00e1 mais sobre o que voc\u00ea pode fazer com os decoradores. Sinta-se livre para verificar o <a href=\"https:\/\/github.com\/microsoft\/TypeScript\/pull\/50820\">pedido pull request<\/a> para mais informa\u00e7\u00f5es sobre como usar decoradores em TypeScript.<\/p>\n<h3>Introduzindo os par\u00e2metros do const type<\/h3>\n<p>Este \u00e9 outro grande lan\u00e7amento que lhe d\u00e1 uma nova ferramenta com gen\u00e9ricos a fim de melhorar a infer\u00eancia que voc\u00ea obt\u00e9m quando voc\u00ea chama fun\u00e7\u00f5es. Por padr\u00e3o, quando voc\u00ea declara valores com <code>const<\/code>, o TypeScript infere o tipo e n\u00e3o seus valores literais:<\/p>\n<pre><code class=\"language-typescript\">\/\/ Inferred type: string[]\nconst names = ['John', 'Jake', 'Jack'];<\/code><\/pre>\n<p>At\u00e9 agora, para conseguir a infer\u00eancia desejada, voc\u00ea tinha que usar a afirma\u00e7\u00e3o &#8220;as const&#8221;:<\/p>\n<pre><code class=\"language-typescript\">\/\/ Inferred type: readonly [\"John\", \"Jake\", \"Jack\"]\nconst names = ['John', 'Jake', 'Jack'] as const;<\/code><\/pre>\n<p>Ao chamar fun\u00e7\u00f5es, ocorre o mesmo. No c\u00f3digo abaixo, o tipo inferido de <strong>countries<\/strong> \u00e9\u00a0<code>string[]<\/code>:<\/p>\n<pre><code class=\"language-typescript\">type HasCountries = { countries: readonly string[] };\nfunction getCountriesExactly(arg: T): T['countries'] {\n    return arg.countries;\n}\n\n\/\/ Inferred type: string[]\nconst countries = getCountriesExactly({ countries: ['USA', 'Canada', 'India'] });<\/code><\/pre>\n<p>Talvez voc\u00ea deseje um tipo mais espec\u00edfico, e uma forma de corrigir isso anteriormente era adicionar a afirma\u00e7\u00e3o <code>as const<\/code>:<\/p>\n<pre><code class=\"language-typescript\">\/\/ Inferred type: readonly [\"USA\", \"Canada\", \"India\"]\nconst names = getNamesExactly({ countries: ['USA', 'Canada', 'India'] } as const);<\/code><\/pre>\n<p>Isso pode ser dif\u00edcil de lembrar e implementar. No entanto, o TypeScript 5.0 introduz um novo recurso onde voc\u00ea pode adicionar um modificador const a uma declara\u00e7\u00e3o de par\u00e2metro de tipo, o que aplicar\u00e1 automaticamente uma infer\u00eancia do const type como padr\u00e3o.<\/p>\n<pre><code class=\"language-typescript\">type HasCountries = { countries: readonly string[] };\nfunction getNamesExactly(arg: T): T['countries'] {\n    return arg.countries;\n}\n\n\/\/ Inferred type: readonly [\"USA\", \"Canada\", \"India\"]\nconst names = getNamesExactly({ countries: ['USA', 'Canada', 'India'] });<\/code><\/pre>\n<p>O uso de par\u00e2metros do<code>const<\/code> type permite que os desenvolvedores expressem suas inten\u00e7\u00f5es mais claramente em seu c\u00f3digo. Se uma vari\u00e1vel tiver a inten\u00e7\u00e3o de ser constante e nunca mudar, o uso de um par\u00e2metro do <code>const<\/code> type garante que ela nunca poder\u00e1 ser alterada acidentalmente.<\/p>\n<p>Voc\u00ea pode verificar o <a href=\"https:\/\/github.com\/microsoft\/TypeScript\/pull\/51865\">pedido pull request<\/a> para mais informa\u00e7\u00f5es sobre como o par\u00e2metro const type funciona no TypeScript.<\/p>\n<h3>Melhorias no Enums<\/h3>\n<p>Enums no TypeScript s\u00e3o uma constru\u00e7\u00e3o poderosa que permite aos desenvolvedores definir um conjunto de constantes nomeadas. No TypeScript 5.0, foram feitas melhorias nos enums para torn\u00e1-los ainda mais flex\u00edveis e \u00fateis.<\/p>\n<p>Por exemplo, se voc\u00ea tiver o seguinte enum passado para uma fun\u00e7\u00e3o:<\/p>\n<pre><code class=\"language-typescript\">enum Color {\n    Red,\n    Green,\n    Blue,\n}\n\nfunction getColorName(colorLevel: Color) {\n    return colorLevel;\n}\n\nconsole.log(getColorName(1));<\/code><\/pre>\n<p>Antes da introdu\u00e7\u00e3o do TypeScript 5.0, voc\u00ea poderia passar um n\u00famero de n\u00edvel errado, e isso n\u00e3o geraria nenhum erro. Mas com a introdu\u00e7\u00e3o do TypeScript 5.0, ele imediatamente gerar\u00e1 um erro.<\/p>\n<p>Al\u00e9m disso, a nova vers\u00e3o transforma todos os enums em enums de uni\u00e3o, criando um tipo \u00fanico para cada membro calculado. Esse aprimoramento permite estreitar todos os enums e a refer\u00eancia aos seus membros como tipos:<\/p>\n<pre><code class=\"language-typescript\">enum Color {\n    Red,\n    Purple,\n    Orange,\n    Green,\n    Blue,\n    Black,\n    White,\n}\n\ntype PrimaryColor = Color.Red | Color.Green | Color.Blue;\n\nfunction isPrimaryColor(c: Color): c is PrimaryColor {\n    return c === Color.Red || c === Color.Green || c === Color.Blue;\n}\n\nconsole.log(isPrimaryColor(Color.White)); \/\/ Outputs: false\nconsole.log(isPrimaryColor(Color.Red)); \/\/ Outputs: true<\/code><\/pre>\n<h3>Melhorias de desempenho do TypeScript 5.0<\/h3>\n<p>O TypeScript 5.0 inclui diversas mudan\u00e7as significativas na estrutura de c\u00f3digo, estruturas de dados e extens\u00f5es algor\u00edtmicas. Isso ajudou a melhorar toda a experi\u00eancia do TypeScript, desde a instala\u00e7\u00e3o at\u00e9 a execu\u00e7\u00e3o, tornando mais r\u00e1pido e eficiente.<\/p>\n<p>Por exemplo, a diferen\u00e7a entre o tamanho do pacote do TypeScript 5.0 e 4.9 \u00e9 bastante impressionante.<\/p>\n<p>TypeScript foi recentemente migrado de namespaces para m\u00f3dulos, permitindo que ele aproveite as modernas ferramentas de build que podem realizar otimiza\u00e7\u00f5es como o levantamento de escopo. Al\u00e9m disso, a remo\u00e7\u00e3o de algum c\u00f3digo obsoleto reduziu cerca de 26.4 MB do tamanho de 63.8 MB do TypeScript 4.9.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/04\/pasted-image-0.png\" alt=\"TypeScript package size\" width=\"1600\" height=\"959\"><figcaption class=\"wp-caption-text\">Tamanho do pacote TypeScript<\/figcaption><\/figure>\n<p>Aqui est\u00e3o mais alguns ganhos interessantes em velocidade e tamanho entre TypeScript 5.0 e 4.9:<\/p>\n<div class=\"responsive-table\">\n<table>\n<tbody>\n<tr>\n<td colspan=\"1\" rowspan=\"1\"><strong>Cen\u00e1rio<\/strong><\/td>\n<td colspan=\"1\" rowspan=\"1\"><strong>Tempo ou Tamanho Relativo ao TS 4.9<\/strong><\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\">Tempo de build\u00a0 material-ui<\/td>\n<td colspan=\"1\" rowspan=\"1\">90%<\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\">Tempo de inicializa\u00e7\u00e3o do compilador TypeScript<\/td>\n<td colspan=\"1\" rowspan=\"1\">89%<\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\">Tempo de build Playwright<\/td>\n<td colspan=\"1\" rowspan=\"1\">88%<\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\">Tempo de self-build do compilador TypeScript<\/td>\n<td colspan=\"1\" rowspan=\"1\">87%<\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\">Tempo de build\u00a0 do Outlook Web<\/td>\n<td colspan=\"1\" rowspan=\"1\">82%<\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\">Tempo de build\u00a0 do c\u00f3digo VS<\/td>\n<td colspan=\"1\" rowspan=\"1\">80%<\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\">Tamanho do Pacote npm do TypeScript<\/td>\n<td colspan=\"1\" rowspan=\"1\">59%<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3>Resolu\u00e7\u00e3o de Bundler para melhor resolu\u00e7\u00e3o do m\u00f3dulo<\/h3>\n<p>Quando voc\u00ea escreve uma instru\u00e7\u00e3o de importa\u00e7\u00e3o no TypeScript, o compilador precisa saber a que se refere essa importa\u00e7\u00e3o. Ele faz isso usando a resolu\u00e7\u00e3o de m\u00f3dulos. Por exemplo, quando voc\u00ea escreve <code>import { a } from \"moduleA\"<\/code>, o compilador precisa saber a defini\u00e7\u00e3o de &#8220;a&#8221; em <code>moduleA<\/code> para verificar seu uso.<\/p>\n<p>No TypeScript 4.7, duas novas op\u00e7\u00f5es foram adicionadas para as configura\u00e7\u00f5es <code>--module<\/code> e <code>moduleResolution<\/code>: <code>node16<\/code> e <code>nodenext<\/code>.<\/p>\n<p>O prop\u00f3sito dessas op\u00e7\u00f5es era representar com mais precis\u00e3o as regras exatas de pesquisa dos m\u00f3dulos ECMAScript no <a href=\"https:\/\/kinsta.com\/pt\/blog\/node-js-vs-php\/\">Node.js<\/a>. No entanto, este modo tem v\u00e1rias restri\u00e7\u00f5es que n\u00e3o s\u00e3o aplicadas por outras ferramentas.<\/p>\n<p>Por exemplo, em um m\u00f3dulo ECMAScript no Node.js, qualquer importa\u00e7\u00e3o relativa deve incluir uma extens\u00e3o de arquivo para que ele funcione corretamente:<\/p>\n<pre><code class=\"language-typescript\">import * as utils from \".\/utils\"; \/\/ Wrong \n\nimport * as utils from \".\/utils.mjs\"; \/\/ Correct<\/code><\/pre>\n<p>O TypeScript introduziu uma nova estrat\u00e9gia chamada &#8220;moduleResolution bundler&#8221; Esta estrat\u00e9gia pode ser implementada adicionando o seguinte c\u00f3digo na se\u00e7\u00e3o &#8220;compilerOptions&#8221; do seu arquivo de configura\u00e7\u00e3o TypeScript:<\/p>\n<pre><code class=\"language-json\">{\n    \"compilerOptions\": {\n        \"target\": \"esnext\",\n        \"moduleResolution\": \"bundler\"\n    }\n}<\/code><\/pre>\n<p>Esta nova estrat\u00e9gia \u00e9 adequada para aqueles que utilizam bundlers modernos como Vite, esbuild, swc, Webpack, Parcel, e outros que utilizam uma estrat\u00e9gia de pesquisa h\u00edbrida.<\/p>\n<p>Voc\u00ea pode verificar o <a href=\"https:\/\/github.com\/microsoft\/TypeScript\/pull\/51669\">pull request original e sua implementa\u00e7\u00e3o<\/a> para mais informa\u00e7\u00f5es sobre como o <code>moduleResolution<\/code> bundler funciona no TypeScript.<\/p>\n<h2>Deprecia\u00e7\u00f5es<\/h2>\n<p>O TypeScript 5.0 vem com alguma deprecia\u00e7\u00e3o, incluindo requisitos de tempo de execu\u00e7\u00e3o, mudan\u00e7as na lib.d.ts e mudan\u00e7as de quebra de <a href=\"https:\/\/kinsta.com\/pt\/blog\/graphql-nodejs\/\">API<\/a>.<\/p>\n<ol start=\"1\">\n<li><strong>Requisitos de tempo de execu\u00e7\u00e3o:<\/strong> O TypeScript agora tem como alvo ECMAScript 2018, e o pacote estabelece uma expectativa m\u00ednima de mecanismo de 12.20. Portanto, os usu\u00e1rios do Node.js devem ter uma vers\u00e3o m\u00ednima de 12.20 ou posterior para usar o TypeScript 5.0.<\/li>\n<li><strong>Mudan\u00e7as na lib.d.ts:<\/strong> Houve algumas mudan\u00e7as na forma como os tipos para o DOM s\u00e3o gerados, o que pode afetar o c\u00f3digo existente. Em particular, certas propriedades foram convertidas de n\u00famero para tipos literais num\u00e9ricos, e propriedades e m\u00e9todos para manipula\u00e7\u00e3o de eventos de cortar, copiar e colar foram movidos entre interfaces.<\/li>\n<li><strong>Mudan\u00e7as de quebra de API:<\/strong> Algumas interfaces desnecess\u00e1rias foram removidas, e algumas melhorias de corre\u00e7\u00e3o foram feitas. O TypeScript 5.0 tamb\u00e9m foi movido para m\u00f3dulos.<\/li>\n<\/ol>\n<p>O TypeScript 5.0 depreciou certas configura\u00e7\u00f5es e seus valores correspondentes, incluindo <code>target: ES3<\/code>, <code>out<\/code>, <code>noImplicitUseStrict<\/code>, <code>keyofStringsOnly<\/code>, <code>suppressExcessPropertyErrors<\/code>, <code>suppressImplicitAnyIndexErrors<\/code>, <code>noStrictGenericChecks<\/code>, <code>charset<\/code>, <code>importsNotUsedAsValues<\/code>, e <code>preserveValueImports<\/code>, bem como prepend em refer\u00eancias de projeto.<\/p>\n<p>Enquanto essas configura\u00e7\u00f5es permanecer\u00e3o v\u00e1lidas at\u00e9 o TypeScript 5.5, um aviso ser\u00e1 emitido para alertar os usu\u00e1rios que ainda as utilizam.<\/p>\n\n<h2>Resumo<\/h2>\n<p>Neste artigo, voc\u00ea aprendeu algumas das principais funcionalidades e melhorias que o TypeScript 5.0 traz, como melhorias em enums, resolu\u00e7\u00e3o de bundler e par\u00e2metros de const type, al\u00e9m de melhorias na velocidade e tamanho.<\/p>\n<p>Se voc\u00ea est\u00e1 pensando em TypeScript para seus pr\u00f3ximos projetos, experimente a <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Hospedagem de Aplicativos da Kinsta gratuitamente<\/a>.<\/p>\n<p><em>Agora \u00e9 a sua vez! Quais funcionalidades ou melhorias voc\u00ea acha mais interessantes no TypeScript 5.0? Existe algum recurso ou melhoria importante que pode ter sido deixado de lado? Compartilhe sua opini\u00e3o nos coment\u00e1rios.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>O TypeScript 5.0 foi lan\u00e7ado oficialmente em 16 de mar\u00e7o de 2023 e j\u00e1 est\u00e1 dispon\u00edvel para todo mundo usar. A nova vers\u00e3o traz um monte &#8230;<\/p>\n","protected":false},"author":287,"featured_media":58946,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[977,978],"class_list":["post-58945","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-frameworks-javascript","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 H\u00e1 de Novo no TypeScript 5.0: Declaradores, Const Type, Melhoria do Enums, Velocidade, e Muito Mais! - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Explore em detalhes o novo TypeScript 5.0 e descubra as novidades, incluindo Declarators, Const Type, melhorias no Enums e muito mais.\" \/>\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\/typescript-5-0\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"O que H\u00e1 de Novo no TypeScript 5.0: Declaradores, Const Type, Melhoria do Enums, Velocidade, e Muito Mais!\" \/>\n<meta property=\"og:description\" content=\"Explore em detalhes o novo TypeScript 5.0 e descubra as novidades, incluindo Declarators, Const Type, melhorias no Enums e muito mais.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/\" \/>\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-09-02T11:28:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-20T10:35:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/04\/typescript-50.jpg\" \/>\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=\"Explore em detalhes o novo TypeScript 5.0 e descubra as novidades, incluindo Declarators, Const Type, melhorias no Enums e muito mais.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/04\/typescript-50.jpg\" \/>\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=\"10 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"O que H\u00e1 de Novo no TypeScript 5.0: Declaradores, Const Type, Melhoria do Enums, Velocidade, e Muito Mais!\",\"datePublished\":\"2023-09-02T11:28:40+00:00\",\"dateModified\":\"2023-09-20T10:35:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/\"},\"wordCount\":1739,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/04\/typescript-50.jpg\",\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/\",\"name\":\"O que H\u00e1 de Novo no TypeScript 5.0: Declaradores, Const Type, Melhoria do Enums, Velocidade, e Muito Mais! - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/04\/typescript-50.jpg\",\"datePublished\":\"2023-09-02T11:28:40+00:00\",\"dateModified\":\"2023-09-20T10:35:12+00:00\",\"description\":\"Explore em detalhes o novo TypeScript 5.0 e descubra as novidades, incluindo Declarators, Const Type, melhorias no Enums e muito mais.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/04\/typescript-50.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/04\/typescript-50.jpg\",\"width\":3042,\"height\":1521},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/#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 H\u00e1 de Novo no TypeScript 5.0: Declaradores, Const Type, Melhoria do Enums, Velocidade, e Muito Mais!\"}]},{\"@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 H\u00e1 de Novo no TypeScript 5.0: Declaradores, Const Type, Melhoria do Enums, Velocidade, e Muito Mais! - Kinsta\u00ae","description":"Explore em detalhes o novo TypeScript 5.0 e descubra as novidades, incluindo Declarators, Const Type, melhorias no Enums e muito mais.","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\/typescript-5-0\/","og_locale":"pt_PT","og_type":"article","og_title":"O que H\u00e1 de Novo no TypeScript 5.0: Declaradores, Const Type, Melhoria do Enums, Velocidade, e Muito Mais!","og_description":"Explore em detalhes o novo TypeScript 5.0 e descubra as novidades, incluindo Declarators, Const Type, melhorias no Enums e muito mais.","og_url":"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2023-09-02T11:28:40+00:00","article_modified_time":"2023-09-20T10:35:12+00:00","og_image":[{"width":3042,"height":1521,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/04\/typescript-50.jpg","type":"image\/jpeg"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"Explore em detalhes o novo TypeScript 5.0 e descubra as novidades, incluindo Declarators, Const Type, melhorias no Enums e muito mais.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/04\/typescript-50.jpg","twitter_creator":"@olawanle_joel","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Joel Olawanle","Tempo estimado de leitura":"10 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"O que H\u00e1 de Novo no TypeScript 5.0: Declaradores, Const Type, Melhoria do Enums, Velocidade, e Muito Mais!","datePublished":"2023-09-02T11:28:40+00:00","dateModified":"2023-09-20T10:35:12+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/"},"wordCount":1739,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/04\/typescript-50.jpg","inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/","url":"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/","name":"O que H\u00e1 de Novo no TypeScript 5.0: Declaradores, Const Type, Melhoria do Enums, Velocidade, e Muito Mais! - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/04\/typescript-50.jpg","datePublished":"2023-09-02T11:28:40+00:00","dateModified":"2023-09-20T10:35:12+00:00","description":"Explore em detalhes o novo TypeScript 5.0 e descubra as novidades, incluindo Declarators, Const Type, melhorias no Enums e muito mais.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/04\/typescript-50.jpg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/04\/typescript-50.jpg","width":3042,"height":1521},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/typescript-5-0\/#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 H\u00e1 de Novo no TypeScript 5.0: Declaradores, Const Type, Melhoria do Enums, Velocidade, e Muito Mais!"}]},{"@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\/58945","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=58945"}],"version-history":[{"count":6,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/58945\/revisions"}],"predecessor-version":[{"id":58947,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/58945\/revisions\/58947"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/58945\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/58945\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/58945\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/58945\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/58945\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/58945\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/58945\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/58945\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/58945\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/58945\/translations\/dk"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/58945\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/58946"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=58945"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=58945"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=58945"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}