TypeScript - TypeScript
Paradigma | Multi-paradigma : funcional , genérico , imperativo , orientado a objetos |
---|---|
Diseñada por | Microsoft |
Desarrollador | Microsoft |
Apareció por primera vez | 1 de octubre de 2012 |
Lanzamiento estable | |
Versión de vista previa | |
Disciplina de mecanografía | Pato , gradual , estructural |
Licencia | Licencia Apache 2.0 |
Extensiones de nombre de archivo | .ts, .tsx |
Sitio web | www |
Influenciado por | |
C # , Java , JavaScript | |
Influenciado | |
AtScript , AssemblyScript |
TypeScript es un lenguaje de programación desarrollado y mantenido por Microsoft . Es un superconjunto sintáctico estricto de JavaScript y agrega escritura estática opcional al lenguaje. TypeScript está diseñado para el desarrollo de grandes aplicaciones y transcompila a JavaScript. Como TypeScript es un superconjunto de JavaScript, los programas JavaScript existentes también son programas TypeScript válidos.
Letra de imprenta se puede utilizar para desarrollar aplicaciones JavaScript para tanto del lado del cliente y del lado del servidor de ejecución (como con Node.js o Deno ). Hay varias opciones disponibles para la transcompilación. Se puede utilizar el Comprobador de TypeScript predeterminado o se puede invocar el compilador de Babel para convertir TypeScript a JavaScript.
TypeScript admite archivos de definición que pueden contener información sobre tipos de bibliotecas JavaScript existentes, al igual que los archivos de encabezado de C ++ pueden describir la estructura de archivos de objetos existentes . Esto permite que otros programas utilicen los valores definidos en los archivos como si fueran entidades TypeScript de tipo estático. Hay archivos de cabecera de terceros para las bibliotecas populares, tales como jQuery , MongoDB , y D3.js . Los encabezados de TypeScript para los módulos básicos de Node.js también están disponibles, lo que permite el desarrollo de programas de Node.js dentro de TypeScript.
El compilador de TypeScript está escrito en TypeScript y compilado en JavaScript. Tiene licencia de Apache License 2.0 . TypeScript se incluye como un lenguaje de programación de primera clase en Microsoft Visual Studio 2013 Update 2 y versiones posteriores, junto con C # y otros lenguajes de Microsoft. Una extensión oficial permite que Visual Studio 2012 también sea compatible con TypeScript. Anders Hejlsberg , arquitecto principal de C # y creador de Delphi y Turbo Pascal , ha trabajado en el desarrollo de TypeScript.
Historia
TypeScript se hizo público por primera vez en octubre de 2012 (en la versión 0.8), después de dos años de desarrollo interno en Microsoft. Poco después del anuncio, Miguel de Icaza elogió el lenguaje en sí, pero criticó la falta de soporte IDE maduro aparte de Microsoft Visual Studio , que no estaba disponible en Linux y OS X en ese momento. A partir de abril de 2021, hay soporte en otros IDE y editores de texto, incluidos Emacs , Vim , Webstorm , Atom y el propio Visual Studio Code de Microsoft .
TypeScript 0.9, lanzado en 2013, agregó soporte para genéricos. TypeScript 1.0 se lanzó en la conferencia de desarrolladores Build de Microsoft en 2014. Visual Studio 2013 Update 2 proporciona soporte integrado para TypeScript.
En julio de 2014, el equipo de desarrollo anunció un nuevo compilador de TypeScript, afirmando ganancias de rendimiento 5 veces mayores. Simultáneamente, el código fuente, que inicialmente estaba alojado en CodePlex , se movió a GitHub .
El 22 de septiembre de 2016, se lanzó TypeScript 2.0; introdujo varias características, incluida la capacidad de los programadores de evitar opcionalmente que se asignen null
valores a las variables , lo que a veces se conoce como el error de los mil millones de dólares .
TypeScript 3.0 se lanzó el 30 de julio de 2018, trayendo muchas adiciones de lenguaje como tuplas en parámetros de descanso y expresiones de propagación, parámetros de descanso con tipos de tupla, parámetros de descanso genéricos, etc.
TypeScript 4.0 se lanzó el 20 de agosto de 2020. Si bien 4.0 no introdujo ningún cambio importante, agregó características de lenguaje como Custom JSX Factories y Variadic Tuple Types.
Diseño
TypeScript se originó a partir de las deficiencias de JavaScript para el desarrollo de aplicaciones a gran escala tanto en Microsoft como entre sus clientes externos. Los desafíos para tratar con código JavaScript complejo llevaron a la demanda de herramientas personalizadas para facilitar el desarrollo de componentes en el lenguaje.
Los desarrolladores de TypeScript buscaron una solución que no rompiera la compatibilidad con el estándar y su soporte multiplataforma. Sabiendo que la propuesta estándar actual de ECMAScript prometía soporte futuro para la programación basada en clases , TypeScript se basó en esa propuesta. Eso llevó a un compilador de JavaScript con un conjunto de extensiones de lenguaje sintáctico, un superconjunto basado en la propuesta, que transforma las extensiones en JavaScript normal. En este sentido, TypeScript fue una vista previa de lo que se puede esperar de ECMAScript 2015. Un aspecto único que no está en la propuesta, pero que se agregó a TypeScript, es la mecanografía estática opcional que permite el análisis de lenguaje estático, lo que facilita las herramientas y la compatibilidad con IDE.
Compatibilidad con ECMAScript 2015
TypeScript agrega soporte para características como clases, módulos y una sintaxis de función de flecha como se define en el estándar ECMAScript 2015.
Características
TypeScript es una extensión de lenguaje que agrega características a ECMAScript 6. Las características adicionales incluyen:
- Tipo de anotaciones y comprobación de tipos en tiempo de compilación
- Inferencia de tipo
- Borrado de tipo
- Interfaces
- Tipos enumerados
- Genéricos
- Espacios de nombres
- Tuplas
- Async / await
Las siguientes características están respaldadas desde ECMAScript 2015:
- Clases
- Módulos
- Sintaxis de "flecha" abreviada para funciones anónimas
- Parámetros opcionales y parámetros predeterminados
Sintácticamente, TypeScript es muy similar a JScript .NET , otra implementación de Microsoft del estándar de lenguaje ECMA-262 que agregó soporte para escritura estática y características clásicas del lenguaje orientado a objetos como clases, herencia, interfaces y espacios de nombres.
Compatibilidad con JavaScript
TypeScript es un superconjunto estricto de ECMAScript 2015, que en sí mismo es un superconjunto de ECMAScript 5, comúnmente conocido como JavaScript. Como tal, un programa JavaScript también es un programa TypeScript válido, y un programa TypeScript puede consumir JavaScript sin problemas. De forma predeterminada, el compilador tiene como objetivo ECMAScript 5, el estándar actual predominante, pero también puede generar construcciones utilizadas en ECMAScript 3 o 2015.
Con TypeScript, es posible utilizar código JavaScript existente, incorporar bibliotecas JavaScript populares y llamar a código generado por TypeScript desde otro JavaScript. Las declaraciones de tipo para estas bibliotecas se proporcionan con el código fuente.
Escribir anotaciones
TypeScript proporciona escritura estática a través de anotaciones de tipo para permitir la verificación de tipos en tiempo de compilación . Esto es opcional y se puede ignorar para usar la escritura dinámica regular de JavaScript.
function add(left: number, right: number): number {
return left + right;
}
Las anotaciones para los tipos primitivos son number
, boolean
y string
. Letra de imprenta también es compatible con los tipos de datos siguientes anotaciones Array
, Enums
, void
.
Tipos de datos recién introducidos son: Tuple
, Union
, never
y any
. Una matriz con tipos de datos predefinidos en cada índice es Tuple
type. Una variable que contiene más de un tipo de datos es Union
tipo. Cuando esté seguro de que algo nunca sucederá, utilice el never
tipo. Las estructuras de any
tipo débil o dinámico son de tipo.
Las anotaciones de tipo se pueden exportar a un archivo de declaraciones separado para que la información de tipo esté disponible para los scripts de TypeScript utilizando tipos ya compilados en JavaScript. Las anotaciones se pueden declarar para una biblioteca de JavaScript existente, como se ha hecho para Node.js y jQuery .
El compilador de TypeScript hace uso de la inferencia de tipos para inferir tipos cuando no se dan los tipos. Por ejemplo, add
se deduciría que el método en el código anterior devuelve un number
incluso si no se ha proporcionado una anotación de tipo de retorno. Esto se basa en los tipos estáticos de left
y right
being numbers
, y el conocimiento del compilador de que el resultado de sumar dos numbers
es siempre a number
. Sin embargo, declarar explícitamente el tipo de retorno permite al compilador verificar la corrección.
Si no se puede inferir ningún tipo debido a la falta de declaraciones, el any
tipo predeterminado es el dinámico . Un valor del any
tipo admite las mismas operaciones que un valor en JavaScript y se realiza una comprobación mínima de tipos estáticos para las operaciones sobre any
valores.
Archivos de declaración
Cuando se compila un script de TypeScript, existe una opción para generar un archivo de declaración (con la extensión .d.ts
) que funciona como una interfaz para los componentes en el JavaScript compilado. En el proceso, el compilador elimina todos los cuerpos de funciones y métodos y conserva solo las firmas de los tipos que se exportan. El archivo de declaración resultante se puede usar para describir los tipos de TypeScript virtuales exportados de una biblioteca o módulo de JavaScript cuando un desarrollador externo lo consume desde TypeScript.
El concepto de archivos de declaración es análogo al concepto de archivo de encabezado que se encuentra en C / C ++ .
declare namespace arithmetics {
add(left: number, right: number): number;
subtract(left: number, right: number): number;
multiply(left: number, right: number): number;
divide(left: number, right: number): number;
}
Los archivos de declaración de tipos se pueden escribir a mano para las bibliotecas de JavaScript existentes, como se ha hecho para jQuery y Node.js.
Grandes colecciones de archivos de declaración para bibliotecas de JavaScript populares se alojan en GitHub en DefinitelyTyped .
Clases
TypeScript admite clases de ECMAScript 2015 que integran el soporte opcional de anotaciones de tipo.
class Person {
private name: string;
private age: number;
private salary: number;
constructor(name: string, age: number, salary: number) {
this.name = name;
this.age = age;
this.salary = salary;
}
toString(): string {
return `${this.name} (${this.age}) (${this.salary})`; // As of version 1.4
}
}
Genéricos
TypeScript admite programación genérica . El siguiente es un ejemplo de la función de identidad .
function id<T>(x: T): T {
return x;
}
Módulos y espacios de nombres
TypeScript distingue entre módulos y espacios de nombres. Ambas características de TypeScript admiten la encapsulación de clases, interfaces, funciones y variables en contenedores. Los espacios de nombres (anteriormente módulos internos) utilizan la expresión de función de JavaScript invocada inmediatamente para encapsular el código, mientras que los módulos (anteriormente módulos externos) aprovechan los patrones de la biblioteca de JavaScript para hacerlo ( AMD o CommonJS ).
Herramientas de desarrollo
Compilador
El compilador de TypeScript, denominado tsc
, está escrito en TypeScript . Como resultado, se puede compilar en JavaScript normal y luego se puede ejecutar en cualquier motor de JavaScript (por ejemplo, un navegador). El paquete del compilador viene incluido con un host de script que puede ejecutar el compilador. También está disponible como un paquete Node.js que usa Node.js como host.
La versión actual del compilador es compatible con ECMAScript 5 de forma predeterminada. Se permite una opción para apuntar a ECMAScript 2015 para hacer uso de características de lenguaje exclusivas de esa versión (por ejemplo, generadores). Las clases, a pesar de ser parte del estándar ECMAScript 2015, están disponibles en ambos modos.
Compatibilidad con IDE y editor
- Microsoft proporciona un complemento para Visual Studio 2012 y WebMatrix , soporte completo integrado en Visual Studio 2013 , Visual Studio 2015 y soporte de editor de texto básico para Emacs y Vim .
- Visual Studio Code es un editor de código fuente multiplataforma de código abierto (en su mayoría) desarrollado por Microsoft basado en Electron . Admite TypeScript además de varios otros lenguajes y ofrece funciones como depuración y finalización inteligente de código .
- alm.tools es un IDE en la nube de código abierto para TypeScript creado con TypeScript, ReactJS y TypeStyle.
- JetBrains admite TypeScript con finalización de código, refactorización y depuración en sus IDE construidos en la plataforma IntelliJ, como PhpStorm 6, WebStorm 6 e IntelliJ IDEA , así como su complemento y extensión de Visual Studio, ReSharper 8.1.
- Atom tiene un complemento TypeScript de Basarat con soporte para completar código, navegación, formateo y compilación rápida.
- El IDE de Cloud9 en línea y Codenvy son compatibles con TypeScript.
- Hay un complemento disponible para NetBeans IDE .
- Hay un complemento disponible para Eclipse IDE (versión Kepler)
- TypEcs está disponible para Eclipse IDE .
- Cross Platform Cloud IDE Codeanywhere es compatible con TypeScript.
- Webclipse Un complemento de Eclipse diseñado para desarrollar TypeScript y Angular 2 .
- Angular IDE Un IDE independiente disponible a través de npm para desarrollar aplicaciones TypeScript y Angular 2, con soporte de terminal integrado.
- Tide - Entorno de desarrollo interactivo TypeScript para Emacs .
Integración con herramientas de automatización de compilación
Mediante el uso de complementos , TypeScript se puede integrar con herramientas de automatización de compilación , incluidos Grunt (grunt-ts), Apache Maven (complemento de TypeScript Maven), Gulp (gulp-typescript) y Gradle (complemento de Gradle de TypeScript).
Herramientas de pelusa
TSLint escanea el código TypeScript para verificar su conformidad con un conjunto de estándares y pautas. ESLint , un linter de JavaScript estándar, también proporcionó algo de soporte para TypeScript a través de complementos de la comunidad. Sin embargo, la incapacidad de ESLint para aprovechar los servicios de lenguaje de TypeScript impidió ciertas formas de análisis semántico y de todo el programa. A principios de 2019, el equipo de TSLint anunció la desaprobación de linter a favor de typescript-eslint
un esfuerzo conjunto de los equipos de TSLint, ESLint y TypeScript para consolidar el linting bajo el paraguas de ESLint para mejorar el rendimiento, la unidad de la comunidad y la accesibilidad del desarrollador. Para usar TypeScript con ESLint, debe agregar @typescript-eslint/eslint-plugin
y @typescript-eslint/parser
.
Historial de versiones
Número de versión | Fecha de lanzamiento | Cambios significativos |
---|---|---|
0,8 | 1 de octubre de 2012 | |
0,9 | 18 de junio de 2013 | |
1.0 | 12 de abril de 2014 | |
1.1 | 6 de octubre de 2014 | mejoras de rendimiento |
1.3 | 12 de noviembre de 2014 |
protected modificador, tipos de tupla
|
1.4 | 20 de enero de 2015 |
tipos de unión , let y const declaraciones, cadenas de la plantilla, el tipo de guardias, de tipo alias
|
1,5 | 20 de julio de 2015 | Módulos ES6, namespace palabra clave, for..of soporte, decoradores
|
1,6 | 16 de septiembre de 2015 | Soporte JSX, tipos de intersección , declaraciones de tipo local, clases y métodos abstractos , funciones de protección de tipo definidas por el usuario |
1,7 | 30 de noviembre de 2015 |
async y await apoyo,
|
1.8 | 22 de febrero de 2016 | restricciones genéricas, errores de análisis de flujo de control, tipos de literal de cadena, allowJs
|
2.0 | 22 de septiembre de 2016 | tipos de conocimiento nulo e indefinido, análisis de tipo basado en flujo de control, tipos de unión discriminada, never tipo, readonly palabra clave, tipo de this para funciones
|
2.1 | 8 de noviembre de 2016 |
keyof y tipos de búsqueda, tipos mapeados, dispersión y descanso de objetos,
|
2.2 | 22 de febrero de 2017 | clases mixtas, object tipo,
|
2.3 | 27 de abril de 2017 |
async iteración, valores predeterminados de parámetros genéricos, opción estricta
|
2.4 | 27 de junio de 2017 | expresiones de importación dinámicas, enumeraciones de cadenas, inferencia mejorada para genéricos, contravarianza estricta para parámetros de devolución de llamada |
2.5 | 31 de agosto de 2017 | variables de cláusula de captura opcionales |
2.6 | 31 de octubre de 2017 | tipos de funciones estrictas |
2,7 | 31 de enero de 2018 | propiedades con nombre constante, tuplas de longitud fija |
2.8 | 27 de marzo de 2018 | tipos condicionales, mejorados keyof con tipos de intersección
|
2.9 | 14 de mayo de 2018 | soporte para símbolos y literales numéricos en keyof y tipos de objetos mapeados |
3,0 | 30 de julio de 2018 | referencias de proyectos, extracción y difusión de listas de parámetros con tuplas |
3.1 | 27 de septiembre de 2018 | tipos de matriz y tupla asignables |
3.2 | 30 de noviembre de 2018 | comprobación más estricta para vincular, llamar y aplicar |
3.3 | 31 de enero de 2019 | reglas relajadas sobre métodos de tipos de unión, compilaciones incrementales para proyectos compuestos |
3.4 | 29 de marzo de 2019 | compilaciones incrementales más rápidas, inferencia de tipos a partir de funciones genéricas, modificador de solo lectura para matrices, aserciones constantes, verificación de tipos global this
|
3,5 | 29 de mayo de 2019 | compilaciones incrementales más rápidas, omisión del tipo de ayudante, comprobaciones de exceso de propiedad mejoradas en tipos de unión, verificación de tipo de unión más inteligente |
3.6 | 28 de agosto de 2019 | Generadores más estrictos, distribución de matrices más precisa, mejor compatibilidad con Unicode para identificadores |
3,7 | 5 de noviembre de 2019 | Encadenamiento opcional, fusión nula |
3.8 | 20 de febrero de 2020 | Importaciones y exportaciones de solo tipo, campos privados de ECMAScript, espera de nivel superior |
3.9 | 12 de mayo de 2020 | Mejoras en la inferencia, mejoras en la velocidad |
4.0 | 20 de agosto de 2020 | Tipos de tuplas variables, elementos de tuplas etiquetados |
4.1 | 19 de noviembre de 2020 | Tipos de letras de plantilla, reasignación de claves en tipos mapeados, tipos condicionales recursivos |
4.2 | 25 de febrero de 2021 | Preservación de alias de tipo más inteligente, elementos de descanso intermedios / iniciales en tipos de tupla, controles más estrictos para el in operador, abstract firmas de construcción
|
4.3 | 26 de mayo de 2021 | Tipos de escritura separados en las propiedades, override y el --noImplicitOverride indicador, mejoras en el tipo de cadena de la plantilla
|
4.4 | 26 de agosto de 2021 | Análisis de flujo de control de condiciones con alias y discriminantes, firmas de índices de patrones de cadenas de símbolos y plantillas |
Ver también
Referencias
Citas
Fuentes
- "Webclipse: Eclipse Plugin" Genuitec. Consultado el 9 de noviembre de 2016.
- "IDE angular de Webclipse: IDE independiente" Genuitec. Consultado el 9 de noviembre de 2016.