{"id":66197,"date":"2023-05-24T12:59:34","date_gmt":"2023-05-24T10:59:34","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=66197&#038;post_type=knowledgebase&#038;preview_id=66197"},"modified":"2025-10-01T21:29:44","modified_gmt":"2025-10-01T19:29:44","slug":"que-es-typescript","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/","title":{"rendered":"\u00bfQu\u00e9 Es TypeScript? Gu\u00eda Completa"},"content":{"rendered":"<p>En el acelerado panorama digital actual, JavaScript se ha convertido en el lenguaje de referencia para crear aplicaciones web din\u00e1micas. Sin embargo, la tipificaci\u00f3n din\u00e1mica de JavaScript a veces puede dar lugar a errores sutiles, por lo que es dif\u00edcil detectarlos al principio del proceso de desarrollo.<\/p>\n<p>Ah\u00ed es donde entra <a href=\"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/\">TypeScript<\/a> \u2014 para revolucionar la forma en que escribimos c\u00f3digo <a href=\"https:\/\/kinsta.com\/javascript\/\">JavaScript<\/a>.<\/p>\n<p>En este art\u00edculo, nos adentraremos en el mundo de TypeScript y exploraremos sus caracter\u00edsticas, ventajas y mejores pr\u00e1cticas. Tambi\u00e9n aprender\u00e1s c\u00f3mo TypeScript aborda las limitaciones de JavaScript y libera el poder de la tipificaci\u00f3n est\u00e1tica en la construcci\u00f3n de aplicaciones web robustas y escalables.<\/p>\n<p>\u00a1Vamos a sumergirnos!<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>\u00bfQu\u00e9 Es TypeScript?<\/h2>\n<p>TypeScript es un superconjunto de JavaScript que a\u00f1ade tipado est\u00e1tico opcional y funciones avanzadas a JavaScript. Ha sido desarrollado por Microsoft y se public\u00f3 por primera vez en octubre de 2012. Desde su lanzamiento en 2012, se ha extendido r\u00e1pidamente entre la comunidad de desarrolladores web.<\/p>\n<p>Seg\u00fan la <a href=\"https:\/\/survey.stackoverflow.co\/2022\/#section-most-loved-dreaded-and-wanted-programming-scripting-and-markup-languages\" target=\"_blank\" rel=\"noopener noreferrer\">encuesta a desarrolladores de Stack Overflow<\/a> de 2022, TypeScript result\u00f3 ser la 4\u00aa tecnolog\u00eda m\u00e1s querida, con un 73,46%. TypeScript se cre\u00f3 para abordar algunas de las limitaciones de JavaScript, como su falta de tipado fuerte, que puede dar lugar a errores sutiles dif\u00edciles de detectar durante el desarrollo.<\/p>\n<p>Por ejemplo, considera el siguiente 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>El c\u00f3digo anterior crea una funci\u00f3n <code>add<\/code>, que est\u00e1 tipada din\u00e1micamente. El tipo de los argumentos <code>a<\/code> y <code>b<\/code> no se aplica. Como resultado, pasar una cadena en lugar de un n\u00famero como argumento no produce un error, sino que concatena los valores como cadenas, provocando un comportamiento inesperado.<\/p>\n<p>Con TypeScript, se introduce el tipado est\u00e1tico opcional, que permite a los <a href=\"https:\/\/kinsta.com\/es\/blog\/tipos-de-desarrolladores\/\">desarrolladores<\/a> especificar los tipos de variables, par\u00e1metros de funci\u00f3n y valores de retorno, detectando errores relacionados con el tipo durante el desarrollo.<\/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>En el c\u00f3digo TypeScript anterior, los tipos de los par\u00e1metros <code>a<\/code> y <code>b<\/code> se definen expl\u00edcitamente como n\u00fameros. Si se pasa una cadena como argumento, TypeScript generar\u00e1 un error en tiempo de compilaci\u00f3n, proporcionando informaci\u00f3n temprana para detectar posibles problemas.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Microsoft sigue participando activamente en el mantenimiento y la mejora de TypeScript, lanzando regularmente nuevas versiones con caracter\u00edsticas mejoradas y mayor rendimiento, como la \u00faltima versi\u00f3n, <a href=\"https:\/\/kinsta.com\/es\/blog\/typescript-5-0\/\">TypeScript 5.0<\/a>.<\/p>\n<\/aside>\n\n\n<h2>Caracter\u00edsticas de TypeScript<\/h2>\n<p>TypeScript proporciona varias caracter\u00edsticas potentes para el <a href=\"https:\/\/kinsta.com\/web-development\/\">desarrollo web<\/a> moderno que abordan algunas de las limitaciones de JavaScript. Estas caracter\u00edsticas ofrecen una mejor experiencia para el desarrollador y una mejor organizaci\u00f3n del c\u00f3digo. Entre ellas se incluyen:<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"decimal\" selector=\"h3\" count-number=\"7\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>1. Tipado Est\u00e1tico<\/h3>\n<p>TypeScript tiene un s\u00f3lido sistema de tipado que permite especificar los tipos de variables y par\u00e1metros de funciones en tiempo de compilaci\u00f3n. Esto permite la detecci\u00f3n temprana de errores relacionados con el tipo, haciendo que el c\u00f3digo sea m\u00e1s fiable y menos propenso a los bugs.<\/p>\n<p>En JavaScript, en cambio, las variables est\u00e1n tipadas din\u00e1micamente, lo que significa que su tipo puede cambiar en tiempo de ejecuci\u00f3n.<\/p>\n<p>Por ejemplo, el siguiente c\u00f3digo JavaScript muestra la declaraci\u00f3n de dos variables que est\u00e1n tipadas din\u00e1micamente como n\u00famero y cadena:<\/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>Este c\u00f3digo dar\u00e1 como resultado \u00ab1020\u00bb, una concatenaci\u00f3n de n\u00famero y cadena. Esta no es la salida esperada \u2014 lo que puede afectar a tu c\u00f3digo. La desventaja de JavaScript es que no arrojar\u00e1 ning\u00fan error. Puedes solucionarlo con TypeScript especificando los tipos de cada variable:<\/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>En el c\u00f3digo anterior, un intento de concatenar un n\u00famero y una cadena utilizando el operador <code>+<\/code> produce un error en tiempo de compilaci\u00f3n, ya que TypeScript aplica una comprobaci\u00f3n de tipos estricta.<\/p>\n<p>Esto ayuda a detectar posibles errores relacionados con el tipo antes de ejecutar el c\u00f3digo, lo que conduce a un c\u00f3digo m\u00e1s robusto y libre de errores.<\/p>\n<h3>2. Tipado Opcional<\/h3>\n<p>TypeScript proporciona flexibilidad a la hora de elegir entre utilizar tipado est\u00e1tico o no. Esto significa que puedes elegir especificar tipos para variables y par\u00e1metros de funciones o dejar que TypeScript infiera los tipos autom\u00e1ticamente bas\u00e1ndose en el valor asignado.<\/p>\n<p>Por ejemplo:<\/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>En este c\u00f3digo, el tipo de <code>num2<\/code> se infiere como <code>string<\/code> bas\u00e1ndose en el valor asignado, pero puedes elegir especificar el tipo si lo deseas.<\/p>\n<p>Tambi\u00e9n puedes establecer el tipo a <code>any<\/code>, lo que significa que acepta cualquier 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. Funciones ES6+<\/h3>\n<p>TypeScript es compatible con las funciones modernas de JavaScript, incluidas las introducidas en ECMAScript 6 (ES6) y versiones posteriores.<\/p>\n<p>Esto permite a los desarrolladores escribir c\u00f3digo m\u00e1s limpio y expresivo utilizando caracter\u00edsticas como funciones de flecha, desestructuraci\u00f3n, literales de plantilla, etc., con comprobaci\u00f3n de tipos a\u00f1adida.<\/p>\n<p>Por ejemplo:<\/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>En este c\u00f3digo, la funci\u00f3n arrow y el literal de plantilla se utilizan perfectamente. Lo mismo ocurre con toda la sintaxis de JavaScript.<\/p>\n<h3>4. Organizaci\u00f3n del C\u00f3digo<\/h3>\n<p>En JavaScript, organizar el c\u00f3digo en archivos separados y gestionar las dependencias puede convertirse en un reto a medida que crece la base de c\u00f3digo. Sin embargo, TypeScript proporciona soporte integrado para m\u00f3dulos y espacios de nombres para organizar mejor el c\u00f3digo.<\/p>\n<p>Los m\u00f3dulos permiten encapsular el c\u00f3digo en archivos separados, facilitando la gesti\u00f3n y el mantenimiento de grandes bases de c\u00f3digo.<\/p>\n<p>Aqu\u00ed tienes un ejemplo:<\/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>En el ejemplo anterior, tenemos dos archivos separados <strong>greeting.ts<\/strong> y <strong>app.ts<\/strong>. El archivo <strong>app.ts<\/strong> importa la funci\u00f3n <code>greet<\/code> del archivo <strong>greeting.ts<\/strong> utilizando la declaraci\u00f3n <code>import<\/code>. El archivo <strong>greeting.ts<\/strong> exporta la funci\u00f3n <code>greet<\/code> utilizando la palabra clave <code>export<\/code>, haci\u00e9ndola accesible para su importaci\u00f3n en otros archivos.<\/p>\n<p>Esto permite organizar mejor el c\u00f3digo y separar las preocupaciones, facilitando la gesti\u00f3n y el mantenimiento de grandes bases de c\u00f3digo.<\/p>\n<p>Los espacios de nombres en TypeScript proporcionan una forma de agrupar c\u00f3digo relacionado y evitar la contaminaci\u00f3n global de espacios de nombres. Pueden utilizarse para definir un contenedor para un conjunto de clases, interfaces, funciones o variables relacionadas.<\/p>\n<p>Aqu\u00ed hay un ejemplo:<\/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>En este c\u00f3digo, definimos un <code>namespace Utilities<\/code> que contiene dos funciones, <code>greet<\/code> y <code>capitalize<\/code>. Podemos acceder a estas funciones utilizando el nombre del espacio de nombres seguido del nombre de la funci\u00f3n, lo que proporciona una agrupaci\u00f3n l\u00f3gica para el c\u00f3digo relacionado.<\/p>\n<h3>5. Caracter\u00edsticas de la Programaci\u00f3n Orientada a Objetos (OOP)<\/h3>\n<p>TypeScript admite conceptos de <a href=\"https:\/\/kinsta.com\/es\/blog\/programacion-orientada-objetos-python\/\">OOP<\/a> como clases, interfaces y herencia, lo que permite un c\u00f3digo estructurado y organizado.<\/p>\n<p>Por ejemplo:<\/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 Avanzado<\/h3>\n<p>TypeScript proporciona un sistema de tipos avanzado que admite gen\u00e9ricos, uniones, intersecciones y mucho m\u00e1s. Estas caracter\u00edsticas mejoran las capacidades de comprobaci\u00f3n est\u00e1tica de tipos de TypeScript, permitiendo a los desarrolladores escribir c\u00f3digo m\u00e1s robusto y expresivo.<\/p>\n<p><strong>Gen\u00e9ricos:<\/strong> Los gen\u00e9ricos permiten escribir c\u00f3digo reutilizable que puede funcionar con distintos tipos. Los gen\u00e9ricos son como marcadores de tipos que se determinan en tiempo de ejecuci\u00f3n bas\u00e1ndose en los valores pasados a una funci\u00f3n o una clase.<\/p>\n<p>Por ejemplo, definamos una funci\u00f3n gen\u00e9rica identidad que toma como argumento un valor del tipo <code>T<\/code> y devuelve un valor del mismo 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>En el ejemplo anterior, el tipo <code>T<\/code> se infiere a partir del tipo de valor pasado a la funci\u00f3n. En el primer uso de la funci\u00f3n identidad, <code>T<\/code> se infiere como n\u00famero porque pasamos <code>10<\/code> como argumento, y en el segundo uso, <code>T<\/code> se infiere como cadena porque pasamos <code>\"hello\"<\/code> como argumento.<\/p>\n<p><strong>Uniones e intersecciones:<\/strong> Las uniones e intersecciones se utilizan para componer tipos y crear relaciones de tipos m\u00e1s complejas.<\/p>\n<p>Las uniones permiten combinar dos o m\u00e1s tipos en uno s\u00f3lo que puede tener cualquiera de los tipos combinados. Las intersecciones permiten combinar dos o m\u00e1s tipos en s\u00f3lo uno que debe satisfacer todos los tipos combinados.<\/p>\n<p>Por ejemplo, podemos definir dos tipos <code>Employee<\/code> y <code>Manager<\/code>, que representan a un empleado y a un directivo, respectivamente.<\/p>\n<pre><code class=\"language-typescript\">type Employee = { name: string, role: string };\ntype Manager = { name: string, department: string };<\/code><\/pre>\n<p>Utilizando los tipos <code>Employee<\/code> y <code>Manager<\/code>, podemos definir un tipo de uni\u00f3n <code>EmployeeOrManager<\/code> que puede ser un <code>Employee<\/code> o un <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>En el c\u00f3digo anterior, la variable <code>person1<\/code> es del tipo <code>EmployeeOrManager<\/code>, lo que significa que se le puede asignar un objeto que satisfaga el tipo <code>Employee<\/code> o <code>Manager<\/code>.<\/p>\n<p>Tambi\u00e9n podemos definir un tipo de intersecci\u00f3n <code>EmployeeOrManager<\/code> que debe satisfacer los tipos <code>Employee<\/code> y <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>En el c\u00f3digo anterior, la variable <code>person2<\/code> es del tipo <code>EmployeeAndManager<\/code>, lo que significa que debe ser un objeto que satisfaga los tipos <code>Employee<\/code> y <code>Manager<\/code>.<\/p>\n<h3>7. Compatibilidad con JavaScript<\/h3>\n<p>TypeScript est\u00e1 dise\u00f1ado para ser un superconjunto de JavaScript, lo que significa que cualquier c\u00f3digo JavaScript v\u00e1lido es tambi\u00e9n c\u00f3digo TypeScript v\u00e1lido. Esto facilita la integraci\u00f3n de TypeScript en proyectos JavaScript existentes sin tener que reescribir todo el c\u00f3digo.<\/p>\n<p>TypeScript se construye sobre JavaScript, a\u00f1adiendo tipado est\u00e1tico opcional y caracter\u00edsticas adicionales, pero a\u00fan te permite utilizar c\u00f3digo JavaScript tal cual.<\/p>\n<p>Por ejemplo, si tienes un archivo JavaScript <strong>app.js<\/strong>, puedes renombrarlo a <strong>app.ts<\/strong> y empezar a utilizar las caracter\u00edsticas de TypeScript gradualmente sin cambiar el c\u00f3digo JavaScript existente. TypeScript seguir\u00e1 siendo capaz de entender y compilar el c\u00f3digo JavaScript como TypeScript v\u00e1lido.<\/p>\n<p>Aqu\u00ed tines un ejemplo de c\u00f3mo TypeScript proporciona una integraci\u00f3n perfecta con 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>Puedes cambiar el nombre del archivo JavaScript anterior a <strong>app.ts<\/strong> y empezar a utilizar las funciones de 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>En el ejemplo anterior, a\u00f1adimos una anotaci\u00f3n de tipo al par\u00e1metro name, especific\u00e1ndolo como <code>string<\/code>, que es opcional en TypeScript. El resto del c\u00f3digo sigue siendo el mismo que en JavaScript. TypeScript es capaz de entender el c\u00f3digo JavaScript y proporcionar comprobaci\u00f3n de tipo para la anotaci\u00f3n de tipo a\u00f1adida, facilitando la adopci\u00f3n gradual de TypeScript en un proyecto JavaScript existente.<\/p>\n<h2>C\u00f3mo Empezar con TypeScript<\/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>Para tu proyecto JavaScript, primero tendr\u00e1s que inicializar un proyecto node utilizando el siguiente comando para crear un archivo package.json:<\/p>\n<pre><code class=\"language-bash\">npm init -y<\/code><\/pre>\n<p>A continuaci\u00f3n, puedes instalar la dependencia de TypeScript, crear archivos TypeScript utilizando la extensi\u00f3n <strong>.ts<\/strong> y escribir tu c\u00f3digo TypeScript.<\/p>\n<p>Una vez que hayas escrito tu c\u00f3digo TypeScript, tienes que compilarlo a JavaScript utilizando el compilador TypeScript (<code>tsc<\/code>). Puedes ejecutar el siguiente comando en el directorio de tu proyecto:<\/p>\n<pre><code class=\"language-bash\">npx tsc .ts<\/code><\/pre>\n<p>Esto compila el c\u00f3digo TypeScript en el archivo especificado a JavaScript y genera un archivo <strong>.js<\/strong> con el mismo nombre.<\/p>\n<p>A continuaci\u00f3n, puedes ejecutar el c\u00f3digo JavaScript compilado en tu proyecto, del mismo modo que ejecutar\u00edas c\u00f3digo JavaScript normal. Puedes utilizar Node.js para ejecutar el c\u00f3digo JavaScript en un entorno <a href=\"https:\/\/kinsta.com\/es\/blog\/salario-desarrolladores-node-js\/\">Node.js<\/a> o incluir el archivo JavaScript compilado en un archivo <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-el-html\/\">HTML<\/a> y ejecutarlo en un navegador.<\/p>\n<h2>Trabajar con Interfaces<\/h2>\n<p>Las interfaces en TypeScript se utilizan para definir los contratos o la forma de los objetos. Te permiten especificar la estructura o forma a la que debe ajustarse un objeto.<\/p>\n<p>Las interfaces definen un conjunto de propiedades y\/o m\u00e9todos que debe tener un objeto para que se considere compatible con la interfaz. Las interfaces pueden utilizarse para proporcionar anotaciones de tipo para objetos, par\u00e1metros de funciones y valores de retorno, lo que permite una mejor comprobaci\u00f3n est\u00e1tica de tipos y sugerencias de finalizaci\u00f3n de c\u00f3digo en <a href=\"https:\/\/kinsta.com\/es\/blog\/php-editor\/\">los IDE<\/a>.<\/p>\n<p>Aqu\u00ed hay un ejemplo de interfaz en TypeScript:<\/p>\n<pre><code class=\"language-typescript\">interface Person {\n  firstName: string;\n  lastName: string;\n  age: number;\n}<\/code><\/pre>\n<p>En este ejemplo, definimos una interfaz <code>Person<\/code> que especifica tres propiedades: <code>firstName<\/code> del tipo <code>string<\/code>, <code>lastName<\/code> del tipo <code>string<\/code>, y <code>age<\/code> del tipo <code>number<\/code>.<\/p>\n<p>Cualquier objeto que tenga estas tres propiedades con los tipos especificados se considerar\u00e1 compatible con la interfaz <code>Person<\/code>. Definamos ahora objetos que se ajusten a la interfaz <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>En este ejemplo, creamos dos objetos <code>person1<\/code> y <code>person2<\/code> que se ajustan a la interfaz <code>Person<\/code>. Ambos objetos tienen las propiedades requeridas <code>firstName<\/code>, <code>lastName<\/code>, y <code>age<\/code> con los tipos especificados, por lo que son compatibles con la interfaz <code>Person<\/code>.<\/p>\n<h3>Ampliaci\u00f3n de Interfaces<\/h3>\n<p>Las interfaces tambi\u00e9n pueden ampliarse para crear nuevas interfaces que hereden propiedades de las interfaces existentes.<\/p>\n<p>Por ejemplo:<\/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>En este ejemplo, definimos una interfaz <code>Animal<\/code> con las propiedades <code>name<\/code> y <code>sound<\/code>, y luego definimos una nueva interfaz \u00abDog\u00bb que ampl\u00eda la interfaz <code>Animal<\/code> y a\u00f1ade una nueva propiedad <code>breed<\/code>. La interfaz <code>Dog<\/code> hereda las propiedades de la interfaz <code>Animal<\/code>, por lo que cualquier objeto que se ajuste a la interfaz <code>Dog<\/code> debe tener tambi\u00e9n las propiedades <code>name<\/code> y <code>sound<\/code>.<\/p>\n<h3>Propiedades Opcionales<\/h3>\n<p>Las interfaces tambi\u00e9n pueden tener propiedades opcionales, que se indican con un <code>?<\/code> despu\u00e9s del nombre de la propiedad.<\/p>\n<p>Aqu\u00ed tienes un ejemplo:<\/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>En este ejemplo, definimos una interfaz <code>Car<\/code> con las propiedades <code>make<\/code> y <code>model<\/code>, y una propiedad opcional <code>year<\/code>. La propiedad <code>year<\/code> no es obligatoria, por lo que los objetos que se ajusten a la interfaz <code>Car<\/code> pueden tenerla o no.<\/p>\n<h2>Comprobaci\u00f3n Avanzada de Tipos<\/h2>\n<p>TypeScript tambi\u00e9n proporciona opciones avanzadas para la comprobaci\u00f3n de tipos en <strong>tsconfig.json<\/strong>. Estas opciones pueden mejorar las capacidades de comprobaci\u00f3n de tipos de tu proyecto TypeScript y detectar posibles errores en tiempo de compilaci\u00f3n, dando lugar a un c\u00f3digo m\u00e1s robusto y fiable.<\/p>\n<h3>1. strictNullChecks<\/h3>\n<p>Cuando se establece en <code>true<\/code>, TypeScript aplica comprobaciones nulas estrictas, lo que significa que las variables no pueden tener un valor de <code>null<\/code> o <code>undefined<\/code> a menos que se especifique expl\u00edcitamente con el tipo de uni\u00f3n <code>null<\/code> o <code>undefined<\/code>.<\/p>\n<p>Por ejemplo:<\/p>\n<pre><code class=\"language-json\">{\n  \"compilerOptions\": {\n    \"strictNullChecks\": true\n  }\n}<\/code><\/pre>\n<p>Con esta opci\u00f3n activada, TypeScript detectar\u00e1 los posibles valores <code>null<\/code> o <code>undefined<\/code> en tiempo de compilaci\u00f3n, ayudando a evitar errores en tiempo de ejecuci\u00f3n causados por el acceso a propiedades o m\u00e9todos de las variables <code>null<\/code> o <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>Cuando se establece en <code>true<\/code>, TypeScript habilita la comprobaci\u00f3n estricta de los tipos de funci\u00f3n, incluyendo la bivarianza de los par\u00e1metros de funci\u00f3n, lo que garantiza que los argumentos de funci\u00f3n se comprueban estrictamente en cuanto a compatibilidad de tipos.<\/p>\n<p>Por ejemplo:<\/p>\n<pre><code class=\"language-json\">{\n  \"compilerOptions\": {\n    \"strictFunctionTypes\": true\n  }\n}<\/code><\/pre>\n<p>Con esta opci\u00f3n activada, TypeScript detectar\u00e1 posibles desajustes de tipo de los par\u00e1metros de funci\u00f3n en tiempo de compilaci\u00f3n, ayudando a evitar errores en tiempo de ejecuci\u00f3n causados por el paso de argumentos incorrectos a las funciones.<\/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. noImplicitarEsto<\/h3>\n<p>Cuando se establece a <code>true<\/code>, TypeScript no permite el uso de <code>this<\/code> con un tipo impl\u00edcito <code>any<\/code>, lo que ayuda a detectar posibles errores al utilizar <code>this<\/code> en m\u00e9todos de clase.<\/p>\n<p>Por ejemplo:<\/p>\n<pre><code class=\"language-json\">{\n  \"compilerOptions\": {\n    \"noImplicitThis\": true\n  }\n}<\/code><\/pre>\n<p>Con esta opci\u00f3n activada, TypeScript detectar\u00e1 errores potenciales causados por el uso de <code>this<\/code> sin las anotaciones de tipo o vinculaci\u00f3n adecuadas en m\u00e9todos de clase.<\/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>La opci\u00f3n <code>target<\/code> especifica la versi\u00f3n de destino ECMAScript para tu c\u00f3digo TypeScript. Determina la versi\u00f3n de JavaScript que el compilador de TypeScript debe generar como salida.<\/p>\n<p>Por ejemplo<\/p>\n<pre><code class=\"language-json\">{\n  \"compilerOptions\": {\n    \"target\": \"ES2018\"\n  }\n}<\/code><\/pre>\n<p>Con esta opci\u00f3n establecida en \u00ab<strong>ES2018<\/strong>\u00ab, TypeScript generar\u00e1 c\u00f3digo JavaScript conforme al est\u00e1ndar ECMAScript 2018.<\/p>\n<p>Esto puede ser \u00fatil si quieres aprovechar las \u00faltimas caracter\u00edsticas y sintaxis de JavaScript, pero tambi\u00e9n necesitas garantizar la compatibilidad con entornos JavaScript m\u00e1s antiguos.<\/p>\n<h3>5. module<\/h3>\n<p>La opci\u00f3n <code>module<\/code> especifica el sistema de m\u00f3dulos que se utilizar\u00e1 en tu c\u00f3digo TypeScript. Las opciones m\u00e1s comunes son \u00ab<strong>CommonJS<\/strong>\u00ab, \u00ab<strong>AMD<\/strong>\u00ab, \u00ab<strong>ES6<\/strong>\u00ab, \u00ab<strong>ES2015<\/strong>\u00ab, etc. Esto determina c\u00f3mo se compilan tus m\u00f3dulos TypeScript en m\u00f3dulos JavaScript.<\/p>\n<p>Por ejemplo:<\/p>\n<pre><code class=\"language-json\">{\n  \"compilerOptions\": {\n    \"module\": \"ES6\"\n  }\n}<\/code><\/pre>\n<p>Con esta opci\u00f3n establecida en \u00ab<strong>ES6<\/strong>\u00ab, TypeScript generar\u00e1 c\u00f3digo JavaScript que utiliza la sintaxis de m\u00f3dulos ECMAScript 6.<\/p>\n<p>Esto puede ser \u00fatil si est\u00e1s trabajando con un entorno JavaScript moderno que admita m\u00f3dulos ECMAScript 6, como en una aplicaci\u00f3n front-end que utilice un agrupador de m\u00f3dulos como webpack o Rollup.<\/p>\n<h3>6. noUnusedLocals y noUnusedParameters<\/h3>\n<p>Estas opciones permiten a TypeScript capturar las variables locales y los par\u00e1metros de funci\u00f3n no utilizados, respectivamente.<\/p>\n<p>Si se establecen en <code>true<\/code>, TypeScript emitir\u00e1 errores de compilaci\u00f3n para cualquier variable local o par\u00e1metro de funci\u00f3n que se declare pero no se utilice en el c\u00f3digo.<\/p>\n<p>Por ejemplo:<\/p>\n<pre><code class=\"language-json\">{\n  \"compilerOptions\": {\n    \"noUnusedLocals\": true,\n    \"noUnusedParameters\": true\n  }\n}<\/code><\/pre>\n<p>Estos son s\u00f3lo algunos ejemplos m\u00e1s de opciones avanzadas de comprobaci\u00f3n de tipos en el archivo <strong>tsconfig.json<\/strong> de TypeScript. Puedes consultar la <a href=\"https:\/\/www.typescriptlang.org\/tsconfig\">documentaci\u00f3n oficial para obtener m\u00e1s<\/a>.<\/p>\n<h2>Buenas Pr\u00e1cticas y Consejos para Utilizar TypeScript<\/h2>\n<h3>1. Anota Correctamente los Tipos de Variables, Par\u00e1metros de Funciones y Valores de Retorno<\/h3>\n<p>Una de las principales ventajas de TypeScript es su s\u00f3lido sistema de tipado, que te permite especificar expl\u00edcitamente los tipos de variables, par\u00e1metros de funci\u00f3n y valores de retorno.<\/p>\n<p>Esto mejora la legibilidad del c\u00f3digo, detecta a tiempo posibles errores relacionados con los tipos y permite completar el c\u00f3digo de forma inteligente en los IDE.<\/p>\n<p>Aqu\u00ed hay un ejemplo:<\/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. Utilizar Eficazmente las Funciones Avanzadas de Tipos de TypeScript<\/h3>\n<p>TypeScript viene con un rico conjunto de caracter\u00edsticas tipogr\u00e1ficas avanzadas, como gen\u00e9ricos, uniones, intersecciones, tipos condicionales y tipos mapeados. Estas caracter\u00edsticas pueden ayudarte a escribir c\u00f3digo m\u00e1s flexible y reutilizable.<\/p>\n<p>Aqu\u00ed un ejemplo:<\/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. Escribir C\u00f3digo Mantenible y Escalable con TypeScript<\/h3>\n<p>TypeScript fomenta la escritura de c\u00f3digo mantenible y escalable proporcionando caracter\u00edsticas como interfaces, clases y m\u00f3dulos.<\/p>\n<p>Aqu\u00ed hay un ejemplo:<\/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. Aprovechar las Herramientas y el Soporte IDE de TypeScript<\/h3>\n<p>TypeScript cuenta con excelentes herramientas y soporte IDE, con funciones como autocompletado, inferencia de tipos, refactorizaci\u00f3n y comprobaci\u00f3n de errores.<\/p>\n<p>Aprovecha estas funciones para mejorar tu productividad y detectar posibles errores en las primeras fases del proceso de desarrollo. Aseg\u00farate de utilizar un IDE compatible con TypeScript, como Visual Studio Code, e instala el <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ms-vscode.vscode-typescript-next\">plugin TypeScript<\/a> para una mejor experiencia de edici\u00f3n 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=\"Extensi\u00f3n TypeScript de VS Code\" width=\"1600\" height=\"877\"><figcaption class=\"wp-caption-text\">Extensi\u00f3n TypeScript de VS Code<\/figcaption><\/figure>\n\n<h2>Resumen<\/h2>\n<p>TypeScript ofrece una amplia gama de potentes funciones que pueden mejorar enormemente tus proyectos de desarrollo web.<\/p>\n<p>Su fuerte tipado est\u00e1tico, su avanzado sistema de tipos y sus capacidades de programaci\u00f3n orientada a objetos lo convierten en una valiosa herramienta para escribir c\u00f3digo mantenible, escalable y robusto. Las herramientas y el soporte IDE de TypeScript tambi\u00e9n proporcionan una experiencia de desarrollo sin fisuras.<\/p>\n<p>Si quieres explorar TypeScript y sus capacidades, puedes hacerlo hoy mismo gracias al <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Alojamiento de Aplicaciones de Kinsta<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En el acelerado panorama digital actual, JavaScript se ha convertido en el lenguaje de referencia para crear aplicaciones web din\u00e1micas. Sin embargo, la tipificaci\u00f3n din\u00e1mica de &#8230;<\/p>\n","protected":false},"author":287,"featured_media":66198,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1297],"class_list":["post-66197","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-tutoriales-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>\u00bfQu\u00e9 Es TypeScript? Gu\u00eda Completa - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Descubre todo lo que necesitas saber sobre TypeScript en esta completa gu\u00eda, incluyendo sus caracter\u00edsticas, ventajas y mejores pr\u00e1cticas.\" \/>\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\/que-es-typescript\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u00bfQu\u00e9 Es TypeScript? Gu\u00eda Completa\" \/>\n<meta property=\"og:description\" content=\"Descubre todo lo que necesitas saber sobre TypeScript en esta completa gu\u00eda, incluyendo sus caracter\u00edsticas, ventajas y mejores pr\u00e1cticas.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/\" \/>\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-05-24T10:59:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-01T19:29:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/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=\"Descubre todo lo que necesitas saber sobre TypeScript en esta completa gu\u00eda, incluyendo sus caracter\u00edsticas, ventajas y mejores pr\u00e1cticas.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/05\/what-is-typescript.jpeg\" \/>\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=\"18 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"\u00bfQu\u00e9 Es TypeScript? Gu\u00eda Completa\",\"datePublished\":\"2023-05-24T10:59:34+00:00\",\"dateModified\":\"2025-10-01T19:29:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/\"},\"wordCount\":3135,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/05\/what-is-typescript.jpeg\",\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/\",\"name\":\"\u00bfQu\u00e9 Es TypeScript? Gu\u00eda Completa - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/05\/what-is-typescript.jpeg\",\"datePublished\":\"2023-05-24T10:59:34+00:00\",\"dateModified\":\"2025-10-01T19:29:44+00:00\",\"description\":\"Descubre todo lo que necesitas saber sobre TypeScript en esta completa gu\u00eda, incluyendo sus caracter\u00edsticas, ventajas y mejores pr\u00e1cticas.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/05\/what-is-typescript.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/05\/what-is-typescript.jpeg\",\"width\":3042,\"height\":1521},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutoriales JavaScript\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/tutoriales-javascript\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"\u00bfQu\u00e9 Es TypeScript? Gu\u00eda Completa\"}]},{\"@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":"\u00bfQu\u00e9 Es TypeScript? Gu\u00eda Completa - Kinsta\u00ae","description":"Descubre todo lo que necesitas saber sobre TypeScript en esta completa gu\u00eda, incluyendo sus caracter\u00edsticas, ventajas y mejores pr\u00e1cticas.","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\/que-es-typescript\/","og_locale":"es_ES","og_type":"article","og_title":"\u00bfQu\u00e9 Es TypeScript? Gu\u00eda Completa","og_description":"Descubre todo lo que necesitas saber sobre TypeScript en esta completa gu\u00eda, incluyendo sus caracter\u00edsticas, ventajas y mejores pr\u00e1cticas.","og_url":"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2023-05-24T10:59:34+00:00","article_modified_time":"2025-10-01T19:29:44+00:00","og_image":[{"width":3042,"height":1521,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/05\/what-is-typescript.jpeg","type":"image\/jpeg"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"Descubre todo lo que necesitas saber sobre TypeScript en esta completa gu\u00eda, incluyendo sus caracter\u00edsticas, ventajas y mejores pr\u00e1cticas.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/05\/what-is-typescript.jpeg","twitter_creator":"@olawanle_joel","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Joel Olawanle","Tiempo de lectura":"18 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"\u00bfQu\u00e9 Es TypeScript? Gu\u00eda Completa","datePublished":"2023-05-24T10:59:34+00:00","dateModified":"2025-10-01T19:29:44+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/"},"wordCount":3135,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/05\/what-is-typescript.jpeg","inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/","url":"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/","name":"\u00bfQu\u00e9 Es TypeScript? Gu\u00eda Completa - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/05\/what-is-typescript.jpeg","datePublished":"2023-05-24T10:59:34+00:00","dateModified":"2025-10-01T19:29:44+00:00","description":"Descubre todo lo que necesitas saber sobre TypeScript en esta completa gu\u00eda, incluyendo sus caracter\u00edsticas, ventajas y mejores pr\u00e1cticas.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/05\/what-is-typescript.jpeg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/05\/what-is-typescript.jpeg","width":3042,"height":1521},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Tutoriales JavaScript","item":"https:\/\/kinsta.com\/es\/secciones\/tutoriales-javascript\/"},{"@type":"ListItem","position":3,"name":"\u00bfQu\u00e9 Es TypeScript? Gu\u00eda Completa"}]},{"@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\/66197","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=66197"}],"version-history":[{"count":12,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/66197\/revisions"}],"predecessor-version":[{"id":78409,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/66197\/revisions\/78409"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/66197\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/66197\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/66197\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/66197\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/66197\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/66197\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/66197\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/66197\/translations\/es"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/66197\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/66198"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=66197"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=66197"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=66197"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}