{"id":64852,"date":"2023-04-18T13:25:10","date_gmt":"2023-04-18T11:25:10","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=64852&#038;preview=true&#038;preview_id=64852"},"modified":"2023-08-21T15:01:17","modified_gmt":"2023-08-21T13:01:17","slug":"typescript-5-0","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/","title":{"rendered":"Novedades de TypeScript 5.0: Declaradores, Const Type, Mejora de los Enums, Velocidad, \u00a1y Mucho M\u00e1s!"},"content":{"rendered":"<p>TypeScript 5.0 se lanz\u00f3 oficialmente el 16 de marzo de 2023, y ya est\u00e1 disponible para todo el mundo. Esta versi\u00f3n introduce muchas caracter\u00edsticas nuevas con el objetivo de hacer TypeScript m\u00e1s peque\u00f1o, m\u00e1s simple y m\u00e1s r\u00e1pido.<\/p>\n<p>Esta nueva versi\u00f3n moderniza los decoradores para la personalizaci\u00f3n de clases, permitiendo la personalizaci\u00f3n de clases y sus miembros de una forma reutilizable. Ahora los <a href=\"https:\/\/kinsta.com\/es\/blog\/tipos-de-desarrolladores\/\">desarrolladores<\/a> pueden a\u00f1adir un modificador const a una declaraci\u00f3n de par\u00e1metro de tipo, permitiendo que las inferencias tipo const sean las predeterminadas. La nueva versi\u00f3n tambi\u00e9n hace que todos los enums sean union enums, simplificando la estructura del c\u00f3digo y acelerando la experiencia TypeScript.<\/p>\n<p>En este art\u00edculo, explorar\u00e1s los cambios introducidos en TypeScript 5.0, proporcionando una visi\u00f3n en profundidad de sus nuevas caracter\u00edsticas y 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>Primeros Pasos con TypeScript 5.0<\/h2>\n<p>TypeScript es un compilador oficial que puedes instalar en tu proyecto utilizando <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-npm\/\">npm<\/a>. Si quieres empezar a utilizar TypeScript 5.0 en tu proyecto, puedes ejecutar el siguiente comando en el directorio de tu proyecto:<\/p>\n<pre><code class=\"language-bash\">npm install -D typescript<\/code><\/pre>\n<p>Esto instalar\u00e1 el compilador en el directorio <strong>node_modules<\/strong>, que ahora puedes ejecutar con el comando <code>npx tsc<\/code>.<\/p>\n<p>Tambi\u00e9n puedes encontrar instrucciones sobre el uso de la nueva versi\u00f3n de TypeScript en <a href=\"https:\/\/code.visualstudio.com\/docs\/typescript\/typescript-compiling#_using-the-workspace-version-of-typescript\" target=\"_blank\" rel=\"noopener noreferrer\">Visual Studio Code en esta documentaci\u00f3n<\/a>.<\/p>\n\n<h2>\u00bfQu\u00e9 Novedades trae TypeScript 5.0?<\/h2>\n<p>En este art\u00edculo, vamos a explorar 5 actualizaciones importantes introducidas en TypeScript. Estas caracter\u00edsticas incluyen:<\/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>Los decoradores han existido en TypeScript durante un tiempo bajo una bandera experimental, pero la nueva versi\u00f3n los pone al d\u00eda con la propuesta ECMAScript, que se encuentra ahora en la <a href=\"https:\/\/github.com\/tc39\/proposal-decorators\" target=\"_blank\" rel=\"noopener noreferrer\">fase 3<\/a>, lo que significa que est\u00e1 en una etapa en la que se a\u00f1ade a TypeScript.<\/p>\n<p>Los decoradores son una forma de personalizar el comportamiento de las clases y sus miembros de forma reutilizable. Por ejemplo, si tienes una clase que tiene dos m\u00e9todos, <code>greet<\/code> y <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>En casos de uso en el mundo real, esta clase deber\u00eda tener m\u00e9todos m\u00e1s complicados que manejen alguna l\u00f3gica as\u00edncrona y tengan efectos paralelos, e.t.c., donde deber\u00edas lanzar algunas llamadas a <code>console.log<\/code> para ayudar a depurar los 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>Se trata de un patr\u00f3n que se repite con frecuencia y ser\u00eda conveniente disponer de una soluci\u00f3n aplicable a todos los m\u00e9todos.<\/p>\n<p>Aqu\u00ed es donde entran en juego los decoradores. Podemos definir una funci\u00f3n llamada <code>debugMethod<\/code> que aparezca como sigue:<\/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>En el c\u00f3digo anterior, el <code>debugMethod<\/code> toma el m\u00e9todo original (<code>originalMethod<\/code>) y devuelve una funci\u00f3n que hace lo siguiente:<\/p>\n<ol start=\"1\">\n<li>Registra el mensaje \u00abComienza la Ejecuci\u00f3n del M\u00e9todo\u00bb.<\/li>\n<li>Pasa el m\u00e9todo original y todos sus argumentos (incluido \u00e9ste).<\/li>\n<li>Registra el mensaje \u00abFinaliza la Ejecuci\u00f3n del M\u00e9todo\u00bb.<\/li>\n<li>Devuelve lo que haya devuelto el m\u00e9todo original.<\/li>\n<\/ol>\n<p>Utilizando decoradores, puedes aplicar el <code>debugMethod<\/code> a tus m\u00e9todos, como se muestra en el c\u00f3digo siguiente:<\/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>Esto devolver\u00e1 lo siguiente:<\/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>Al definir la funci\u00f3n decoradora (<code>debugMethod<\/code>), se pasa un segundo par\u00e1metro llamado <code>context<\/code> (es el objeto contexto \u2014 tiene informaci\u00f3n \u00fatil sobre c\u00f3mo se declar\u00f3 el m\u00e9todo decorado y tambi\u00e9n el nombre del m\u00e9todo). Puedes actualizar tu <code>debugMethod<\/code> para obtener el nombre del m\u00e9todo del 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>Cuando ejecutes tu c\u00f3digo, la salida llevar\u00e1 ahora el nombre de cada m\u00e9todo decorado con el 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>Hay m\u00e1s cosas que puedes hacer con los decoradores. No dudes en consultar el <a href=\"https:\/\/github.com\/microsoft\/TypeScript\/pull\/50820\">pull request original<\/a> para obtener m\u00e1s informaci\u00f3n sobre c\u00f3mo utilizar los decoradores en TypeScript.<\/p>\n<h3>Introducci\u00f3n de los Par\u00e1metros de Tipo const<\/h3>\n<p>Este es otro gran lanzamiento que te proporciona una nueva herramienta con gen\u00e9ricos para mejorar la inferencia que obtienes cuando llamas a funciones. Por defecto, cuando declaras valores con <code>const<\/code>, TypeScript infiere el tipo y no sus valores literales:<\/p>\n<pre><code class=\"language-typescript\">\/\/ Inferred type: string[]\nconst names = ['John', 'Jake', 'Jack'];<\/code><\/pre>\n<p>Hasta ahora, para conseguir la inferencia deseada, ten\u00edas que utilizar la aserci\u00f3n const a\u00f1adiendo \u00abas const\u00bb:<\/p>\n<pre><code class=\"language-typescript\">\/\/ Inferred type: readonly [\"John\", \"Jake\", \"Jack\"]\nconst names = ['John', 'Jake', 'Jack'] as const;<\/code><\/pre>\n<p>Cuando llamas a funciones, es similar. En el c\u00f3digo siguiente, el tipo inferido de <strong>los pa\u00edses<\/strong> es <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>Puede que desees un tipo m\u00e1s espec\u00edfico, para lo cual una forma de solucionarlo hasta ahora ha sido a\u00f1adir la aserci\u00f3n <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>Esto puede ser dif\u00edcil de recordar e implementar. Sin embargo, TypeScript 5.0 introduce una nueva caracter\u00edstica por la que puedes a\u00f1adir un modificador const a una declaraci\u00f3n de par\u00e1metro de tipo, que aplicar\u00e1 autom\u00e1ticamente una inferencia de tipo const por defecto.<\/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>El uso de par\u00e1metros de tipo <code>const<\/code> permite a los desarrolladores expresar la intenci\u00f3n m\u00e1s claramente en su c\u00f3digo. Si se pretende que una variable sea constante y no cambie nunca, utilizar un par\u00e1metro de tipo <code>const<\/code> garantiza que nunca pueda cambiarse accidentalmente.<\/p>\n<p>Puedes consultar el <a href=\"https:\/\/github.com\/microsoft\/TypeScript\/pull\/51865\">pull request original<\/a> para obtener m\u00e1s informaci\u00f3n sobre c\u00f3mo funciona el par\u00e1metro de tipo const en TypeScript.<\/p>\n<h3>Mejoras en los Enums<\/h3>\n<p>Los enums en TypeScript son una potente construcci\u00f3n que permite a los desarrolladores definir un conjunto de constantes con nombre. En TypeScript 5.0, se han introducido mejoras en los enums para hacerlos a\u00fan m\u00e1s flexibles y \u00fatiles.<\/p>\n<p>Por ejemplo, si pasas el siguiente enum a una funci\u00f3n:<\/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 de la introducci\u00f3n de TypeScript 5.0, pod\u00edas pasar un n\u00famero de nivel incorrecto, y no arrojar\u00eda ning\u00fan error. Pero con la introducci\u00f3n de TypeScript 5.0, se producir\u00e1 inmediatamente un error.<\/p>\n<p>Adem\u00e1s, la nueva versi\u00f3n convierte todos los enums en enums de uni\u00f3n, creando un tipo \u00fanico para cada miembro computado. Esta mejora permite acotar todos los enums y referenciar sus miembros 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>Mejoras de Rendimiento de TypeScript 5.0<\/h3>\n<p>TypeScript 5.0 incluye numerosos cambios significativos en la estructura del c\u00f3digo, las estructuras de datos y las extensiones algor\u00edtmicas. Esto ha ayudado a mejorar toda la experiencia TypeScript, desde la instalaci\u00f3n hasta la ejecuci\u00f3n, haci\u00e9ndola m\u00e1s r\u00e1pida y eficiente.<\/p>\n<p>Por ejemplo, la diferencia entre el tama\u00f1o de los paquetes de TypeScript 5.0 y 4.9 es bastante considerable.<\/p>\n<p>TypeScript se ha migrado recientemente de espacios de nombres a m\u00f3dulos, lo que le permite aprovechar las herramientas de construcci\u00f3n modernas que pueden realizar optimizaciones como la elevaci\u00f3n del \u00e1mbito. Adem\u00e1s, la eliminaci\u00f3n de c\u00f3digo obsoleto ha reducido en 26,4 MB los 63,8 MB del paquete de 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=\"Tama\u00f1o del paquete TypeScript\" width=\"1600\" height=\"959\"><figcaption class=\"wp-caption-text\">Tama\u00f1o del paquete TypeScript<\/figcaption><\/figure>\n<p>Aqu\u00ed tienes algunas ventajas interesantes en velocidad y tama\u00f1o entre TypeScript 5.0 y 4.9:<\/p>\n<div class=\"responsive-table\">\n<table>\n<tbody>\n<tr>\n<td colspan=\"1\" rowspan=\"1\"><strong>Escenario<\/strong><\/td>\n<td colspan=\"1\" rowspan=\"1\"><strong>Tiempo o tama\u00f1o en relaci\u00f3n con TS 4.9<\/strong><\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\">Tiempo de construcci\u00f3n material-ui<\/td>\n<td colspan=\"1\" rowspan=\"1\">90%<\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\">Tiempo de inicio del Compilador TypeScript<\/td>\n<td colspan=\"1\" rowspan=\"1\">89%<\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\">Tiempo de construcci\u00f3n de Playwright<\/td>\n<td colspan=\"1\" rowspan=\"1\">88%<\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\">Tiempo de autocompilaci\u00f3n del Compilador de TypeScript<\/td>\n<td colspan=\"1\" rowspan=\"1\">87%<\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\">Tiempo de construcci\u00f3n de Outlook Web<\/td>\n<td colspan=\"1\" rowspan=\"1\">82%<\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\">Tiempo de construcci\u00f3n de VS Code<\/td>\n<td colspan=\"1\" rowspan=\"1\">80%<\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\">Tama\u00f1o del paquete typescript npm<\/td>\n<td colspan=\"1\" rowspan=\"1\">59%<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3>Resoluci\u00f3n Bundler para una Mejor Resoluci\u00f3n de M\u00f3dulos<\/h3>\n<p>Cuando escribes una sentencia import en TypeScript, el compilador necesita saber a qu\u00e9 se refiere la importaci\u00f3n. Para ello utiliza la resoluci\u00f3n de m\u00f3dulos. Por ejemplo, cuando escribes <code>import { a } from \"moduleA\"<\/code>, el compilador necesita conocer la definici\u00f3n de <code>a<\/code> en <code>moduleA<\/code> para comprobar su uso.<\/p>\n<p>En TypeScript 4.7, se a\u00f1adieron dos nuevas opciones para la configuraci\u00f3n de <code>--module<\/code> y <code>moduleResolution<\/code>: <code>node16<\/code> y <code>nodenext<\/code>.<\/p>\n<p>El prop\u00f3sito de estas opciones era representar con mayor precisi\u00f3n las reglas exactas de b\u00fasqueda de m\u00f3dulos ECMAScript en <a href=\"https:\/\/kinsta.com\/es\/blog\/node-js-vs-php\/\">Node.js<\/a>. Sin embargo, este modo tiene varias restricciones que no aplican otras herramientas.<\/p>\n<p>Por ejemplo, en un m\u00f3dulo ECMAScript en Node.js, cualquier importaci\u00f3n relativa debe incluir una extensi\u00f3n de archivo para que funcione correctamente:<\/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>TypeScript ha introducido una nueva estrategia llamada \u00abmoduleResolution bundler\u00bb. Esta estrategia puede implementarse a\u00f1adiendo el siguiente c\u00f3digo en la secci\u00f3n \u00abcompilerOptions\u00bb de tu archivo de configuraci\u00f3n de TypeScript:<\/p>\n<pre><code class=\"language-json\">{\n    \"compilerOptions\": {\n        \"target\": \"esnext\",\n        \"moduleResolution\": \"bundler\"\n    }\n}<\/code><\/pre>\n<p>Esta nueva estrategia es adecuada para aquellos que utilizan bundlers modernos como Vite, esbuild, swc, Webpack, Parcel y otros que utilizan una estrategia de b\u00fasqueda h\u00edbrida.<\/p>\n<p>Puedes consultar el <a href=\"https:\/\/github.com\/microsoft\/TypeScript\/pull\/51669\" target=\"_blank\" rel=\"noopener noreferrer\">pull request original y su implementaci\u00f3n<\/a> para obtener m\u00e1s informaci\u00f3n sobre c\u00f3mo funciona el bundler <code>moduleResolution<\/code> en TypeScript.<\/p>\n<h2>Depreciaciones<\/h2>\n<p>TypeScript 5.0 viene con algunas depreciaciones, incluyendo requisitos de tiempo de ejecuci\u00f3n, cambios en lib.d.ts y cambios que rompen la <a href=\"https:\/\/kinsta.com\/es\/blog\/graphql-nodejs\/\">API<\/a>.<\/p>\n<ol start=\"1\">\n<li><strong>Requisitos de Tiempo de Ejecuci\u00f3n:<\/strong> TypeScript ahora est\u00e1 orientado a ECMAScript 2018, y el paquete establece una expectativa de motor m\u00ednima de 12.20. Por lo tanto, los usuarios de Node.js deben tener una versi\u00f3n m\u00ednima de 12.20 o posterior para utilizar TypeScript 5.0.<\/li>\n<li><strong>Cambios en lib.d.ts:<\/strong> Se han producido algunos cambios en la forma de generar los tipos para el DOM, que pueden afectar al c\u00f3digo existente. En concreto, algunas propiedades se han convertido de tipos num\u00e9ricos a tipos literales num\u00e9ricos, y las propiedades y m\u00e9todos para la gesti\u00f3n de eventos de cortar, copiar y pegar se han trasladado entre interfaces.<\/li>\n<li><strong>Cambios de ruptura de la API:<\/strong> Se han eliminado algunas interfaces innecesarias y se han realizado algunas mejoras de correcci\u00f3n. TypeScript 5.0 tambi\u00e9n se ha trasladado a m\u00f3dulos.<\/li>\n<\/ol>\n<p>TypeScript 5.0 ha dejado obsoletos ciertos ajustes y sus valores correspondientes, incluyendo <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>, y <code>preserveValueImports<\/code>, as\u00ed como prepend en las referencias de proyectos.<\/p>\n<p>Aunque estas configuraciones seguir\u00e1n siendo v\u00e1lidas hasta TypeScript 5.5, se emitir\u00e1 una advertencia para alertar a los usuarios que a\u00fan las utilicen.<\/p>\n\n<h2>Resumen<\/h2>\n<p>En este art\u00edculo, has aprendido algunas de las principales caracter\u00edsticas y mejoras que aporta TypeScript 5.0, como las mejoras en los enums, la resoluci\u00f3n de bundler y los par\u00e1metros de tipo const, junto con mejoras en la velocidad y el tama\u00f1o.<\/p>\n<p>Si est\u00e1s pensando en TypeScript para tus pr\u00f3ximos proyectos, <a href=\"https:\/\/sevalla.com\/application-hosting\/\">prueba gratis el Alojamiento de Aplicaciones de Kinsta<\/a>.<\/p>\n<p><em>\u00a1Ahora es tu turno! \u00bfQu\u00e9 caracter\u00edsticas o mejoras te parecen m\u00e1s atractivas en TypeScript 5.0? \u00bfHay alguna significativa que hayamos pasado por alto? H\u00e1znoslo saber en los comentarios.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>TypeScript 5.0 se lanz\u00f3 oficialmente el 16 de marzo de 2023, y ya est\u00e1 disponible para todo el mundo. Esta versi\u00f3n introduce muchas caracter\u00edsticas nuevas con &#8230;<\/p>\n","protected":false},"author":287,"featured_media":64853,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1296],"class_list":["post-64852","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-frameworks-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>Novedades de TypeScript 5.0: Declaradores, Const Type, Mejora de los Enums, Velocidad - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Sum\u00e9rgete a fondo en el nuevo TypeScript 5.0 y descubre sus novedades, incluyendo Declarators, Const Type, Enums Improvement, y mucho m\u00e1s.\" \/>\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\/es\/blog\/typescript-5-0\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Novedades de TypeScript 5.0: Declaradores, Const Type, Mejora de los Enums, Velocidad, \u00a1y Mucho M\u00e1s!\" \/>\n<meta property=\"og:description\" content=\"Sum\u00e9rgete a fondo en el nuevo TypeScript 5.0 y descubre sus novedades, incluyendo Declarators, Const Type, Enums Improvement, y mucho m\u00e1s.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-04-18T11:25:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-21T13:01:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/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=\"Sum\u00e9rgete a fondo en el nuevo TypeScript 5.0 y descubre sus novedades, incluyendo Declarators, Const Type, Enums Improvement, y mucho m\u00e1s.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/04\/typescript-50.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@olawanle_joel\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\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\/es\/blog\/typescript-5-0\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Novedades de TypeScript 5.0: Declaradores, Const Type, Mejora de los Enums, Velocidad, \u00a1y Mucho M\u00e1s!\",\"datePublished\":\"2023-04-18T11:25:10+00:00\",\"dateModified\":\"2023-08-21T13:01:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/\"},\"wordCount\":1744,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/04\/typescript-50.jpg\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/\",\"name\":\"Novedades de TypeScript 5.0: Declaradores, Const Type, Mejora de los Enums, Velocidad - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/04\/typescript-50.jpg\",\"datePublished\":\"2023-04-18T11:25:10+00:00\",\"dateModified\":\"2023-08-21T13:01:17+00:00\",\"description\":\"Sum\u00e9rgete a fondo en el nuevo TypeScript 5.0 y descubre sus novedades, incluyendo Declarators, Const Type, Enums Improvement, y mucho m\u00e1s.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/04\/typescript-50.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/04\/typescript-50.jpg\",\"width\":3042,\"height\":1521,\"caption\":\"Novedades de TypeScript 5.0: Declaradores, Const Type, Mejora de los Enums, Velocidad\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Frameworks JavaScript\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/frameworks-javascript\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Novedades de TypeScript 5.0: Declaradores, Const Type, Mejora de los Enums, Velocidad, \u00a1y Mucho M\u00e1s!\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/es\/#website\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"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\/es\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/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\/es\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Novedades de TypeScript 5.0: Declaradores, Const Type, Mejora de los Enums, Velocidad - Kinsta\u00ae","description":"Sum\u00e9rgete a fondo en el nuevo TypeScript 5.0 y descubre sus novedades, incluyendo Declarators, Const Type, Enums Improvement, y mucho m\u00e1s.","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\/es\/blog\/typescript-5-0\/","og_locale":"es_ES","og_type":"article","og_title":"Novedades de TypeScript 5.0: Declaradores, Const Type, Mejora de los Enums, Velocidad, \u00a1y Mucho M\u00e1s!","og_description":"Sum\u00e9rgete a fondo en el nuevo TypeScript 5.0 y descubre sus novedades, incluyendo Declarators, Const Type, Enums Improvement, y mucho m\u00e1s.","og_url":"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2023-04-18T11:25:10+00:00","article_modified_time":"2023-08-21T13:01:17+00:00","og_image":[{"width":3042,"height":1521,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/04\/typescript-50.jpg","type":"image\/jpeg"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"Sum\u00e9rgete a fondo en el nuevo TypeScript 5.0 y descubre sus novedades, incluyendo Declarators, Const Type, Enums Improvement, y mucho m\u00e1s.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/04\/typescript-50.jpg","twitter_creator":"@olawanle_joel","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Joel Olawanle","Tiempo de lectura":"10 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Novedades de TypeScript 5.0: Declaradores, Const Type, Mejora de los Enums, Velocidad, \u00a1y Mucho M\u00e1s!","datePublished":"2023-04-18T11:25:10+00:00","dateModified":"2023-08-21T13:01:17+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/"},"wordCount":1744,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/04\/typescript-50.jpg","inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/","url":"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/","name":"Novedades de TypeScript 5.0: Declaradores, Const Type, Mejora de los Enums, Velocidad - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/04\/typescript-50.jpg","datePublished":"2023-04-18T11:25:10+00:00","dateModified":"2023-08-21T13:01:17+00:00","description":"Sum\u00e9rgete a fondo en el nuevo TypeScript 5.0 y descubre sus novedades, incluyendo Declarators, Const Type, Enums Improvement, y mucho m\u00e1s.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/04\/typescript-50.jpg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/04\/typescript-50.jpg","width":3042,"height":1521,"caption":"Novedades de TypeScript 5.0: Declaradores, Const Type, Mejora de los Enums, Velocidad"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Frameworks JavaScript","item":"https:\/\/kinsta.com\/es\/secciones\/frameworks-javascript\/"},{"@type":"ListItem","position":3,"name":"Novedades de TypeScript 5.0: Declaradores, Const Type, Mejora de los Enums, Velocidad, \u00a1y Mucho M\u00e1s!"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/es\/#website","url":"https:\/\/kinsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","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\/es\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/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\/es\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/64852","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=64852"}],"version-history":[{"count":8,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/64852\/revisions"}],"predecessor-version":[{"id":65221,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/64852\/revisions\/65221"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/64852\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/64852\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/64852\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/64852\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/64852\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/64852\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/64852\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/64852\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/64852\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/64852\/translations\/dk"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/64852\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/64853"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=64852"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=64852"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=64852"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}