TypeScript Tutorial: ¿Qué es una interfaz, una enumeración y un array?

⚡ Resumen inteligente

TypeScript es un superconjunto fuertemente tipado de JavaScript que se compila a texto plano JavaEste script añade clases, interfaces, enumeraciones, módulos y espacios de nombres. El artículo abarca la instalación, variables, tipos, matrices, clases, modificadores de acceso, interfaces, funciones, enumeraciones, módulos y declaraciones ambientales.

  • 🧬 Relación lingüística: Cada válido JavaEl programa de script es válido TypeScripty el compilador emite código plano JavaScript para cualquier versión de destino.
  • 🔒 Tipo estáticoping: Una variable conserva el tipo especificado en su declaración, por lo que cualquier discrepancia se notifica en tiempo de compilación, en lugar de en tiempo de ejecución.
  • 🧱 Orientación de objetos: Las clases, la herencia y los modificadores públicos, privados y protegidos aportan una estructura familiar al código del navegador.
  • 📐 Interfaces: Una interfaz define una contract de propiedades y métodos que una variable, función o clase debe satisfacer.
  • 🔢 Enumeraciones: Los conjuntos de constantes con nombre se compilan en funciones autoinvocadas, ya que JavaEl script no tiene un tipo de enumeración nativo.
  • 📦 Módulos: Las funciones de exportación e importación mantienen las declaraciones en un archivo local y evitan conflictos de nombres globales.
  • ???? Declaraciones ambientales: Un archivo .d.ts describe a un tercero. JavaBiblioteca de scripts, por lo que la comprobación de tipos se aplica sin necesidad de reescribirla.

TypeScript Tutorial

¿Qué es TypeScript?

TypeScript es un superconjunto de JavaGuión. TypeScript es un lenguaje de programación orientado a objetos que admite clases, interfaces y más. Es un lenguaje de código abierto desarrollado por Microsoft que compila estáticamente el código para JavaScript. Se puede ejecutar fácilmente en un navegador o en Node.js.

Todas las funciones más recientes lanzadas para ECMAScript son compatibles con TypeScripty además TypeScript tiene sus propias características orientadas a objetos, como interfaces, declaraciones ambientales y herencia de clases, que ayudan en el desarrollo.ping una aplicación grande que de otro modo sería difícil de construir JavaScript.

La relación es unidireccional. Cada relación válida JavaEl archivo de script ya es válido. TypeScript, pero lo contrario no es cierto, porque las anotaciones de tipo existen solo en TypeScript y se borran durante la compilación.

¿Por qué utilizar TypeScript?

Aquí están los beneficios importantes de usar TypeScript:

  • Proyectos grandes y complejos en JavaLos scripts son difíciles de codificar y mantener.
  • TypeScript Ayuda mucho con la organización del código y elimina la mayoría de los errores durante la compilación, en lugar de en tiempo de ejecución.
  • TypeScript Admite bibliotecas JS y documentación de la API.
  • Es un lenguaje de scripting con tipado opcional, por lo que los tipos se pueden adoptar gradualmente.
  • TypeScript El código se puede convertir en texto plano. JavaCódigo de script para cualquier navegador.
  • Proporciona una mejor estructuración del código y técnicas de programación orientada a objetos.
  • Permite un mejor soporte de herramientas en tiempo de desarrollo, incluyendo autocompletado y refactorización segura.
  • Puede extender el lenguaje más allá del estándar, con características como los decoradores.

La principal ventaja práctica reside en la compatibilidad con el editor. Dado que el compilador conoce la estructura de cada valor, un editor puede renombrar una propiedad en todo el proyecto e informar de cada lugar donde ya no coincida.

TypeScript Nuestra historia

Veamos los hitos importantes de la historia de TypeScript:

  • Después de dos años de desarrollo interno en Microsoft, TypeScript La versión 0.9 se lanzó en 2013.
  • TypeScript La versión 1.0, con soporte adicional para genéricos, se lanzó en Build 2014.
  • En julio de 2014, un nuevo TypeScript Llegó un compilador que era cinco veces más rápido que la versión anterior.
  • En julio de 2015, se añadió compatibilidad con los módulos ES6, la palabra clave namespace, for…of y los decoradores.
  • En noviembre de 2016, se añadieron los tipos mapeados, los tipos de clave y búsqueda, y el resto y la propagación de objetos.
  • El 27 de marzo de 2018 se añadieron tipos condicionales y una función keyof mejorada con tipos de intersección.
  • TypeScript La versión 5.0, lanzada en marzo de 2023, modernizó los decoradores y redujo el tamaño del paquete.
  • TypeScript La versión 6.0 llegó en marzo de 2026 como la versión final construida sobre la base de JavaCódigo fuente del script.
  • TypeScript 7.0 traslada el compilador a una implementación nativa de Go, que Microsoft Según los informes, es aproximadamente diez veces más rápido que la versión 6.0.

Quien usa TypeScript?

TypeScript Ya no es una opción minoritaria. Es la base de varias de las herramientas de front-end y back-end más utilizadas, y la siguiente lista muestra dónde es más probable que un principiante se la encuentre.

  • Angular: El framework Angular está escrito en TypeScripty se espera que el código de la aplicación también esté escrito en él.
  • Proyectos de React y Vue: Ambos ecosistemas envían oficiales TypeScript Las plantillas, y la mayoría de los programas de inicio modernos, lo habilitan por defecto.
  • Backends de Node.js: Los marcos de servidor como NestJS están construidos en torno a TypeScript clases y decoradores.
  • Herramientas de edición: Visual Studio Code es en sí mismo un gran TypeScript código fuente, por eso su compatibilidad con diferentes idiomas es tan completa.
  • Interfaces de usuario para grandes empresas: Los equipos que trabajan con muchos colaboradores lo adoptan para detectar errores de integración antes del despliegue.

Cómo descargar e instalar TypeScript

Aquí está el proceso paso a paso para descargar e instalar. TypeScript:

Paso 1) Descargue e instale Nodejs

Ve al sitio oficial de Node.js, https://nodejs.org/en/download/y descarga e instala Node.js para tu sistema operativo. Encontrarás instrucciones detalladas en la guía sobre Cómo descargar e instalar Node.js.

Paso 2) Verifique la versión de Nodejs y npm

Para comprobar si Node.js y npm están instalados, verifique la versión en la línea de comandos.

D:\typeproject>node --version
v22.14.0

D:\typeproject>npm --version
10.9.2

Cualquier versión LTS actual de Node funciona. TypeScript Para ejecutar el compilador, solo se requiere una versión de Node compatible.

Paso 3) TypeScript Instalación

Crea el directorio de tu proyecto typeproject\ y ejecuta npm init, como se muestra en el comando a continuación:

npm init

Paso 4) Inicie la instalación

Esto crea el archivo package.json, que almacenará las dependencias de nuestro proyecto.

Una vez hecho esto, instale TypeScript como sigue:

npm -g install typescript

El comando anterior se encargará de instalar TypeScriptAgregar “-g” a npm install instalará TypeScript globalmente. La ventaja de usar -g es que podrá usar el TypeScript tsc comando desde cualquier directorio, ya que está instalado globalmente. En caso de que no desee instalar TypeScript A nivel global, utilice el siguiente comando:

npm install --save-dev typescript

Crea una carpeta src\ en el directorio de tu proyecto y dentro de src\ crea la TypeScript archive test.ts y escriba su código.

Ejemplo: prueba.ts

function add(x:number, y:number) {
	return x+y;
}

let sum = add(5,10);
console.log(sum);

Compilar TypeScript codificar a Javascript

Para compilar el código anterior, utilice el siguiente comando.

If TypeScript Si se instala globalmente, utilice el siguiente comando:

tsc test.ts

If TypeScript está instalado localmente en su proyecto, necesita usar la ruta de TypeScript desde node_modules, como se muestra, o ejecútelo a través de npx:

node_modules\typescript\bin\tsc test.ts

OR

npx tsc test.ts

El comando anterior creará un archivo test.js que tendrá el código compilado a JavaGuión.

Ejemplo: prueba.js

function add(x, y) {
    return x + y;
}
var sum = add(5, 10);
console.log(sum);

Implementación Javascript usando nodejs

Ahora ejecutaremos test.js en Nodejs de la siguiente manera:

D:\typeproject\src>node test.js
15

El valor que se pasa a console.log se muestra cuando se ejecuta test.js.

Implementación JavaScript en el navegador

Ejemplo:

<html>
<head></head>
<body>
<script type="text/javascript" src="test.js"></script>
</body>
</html>

Implementación Javascript usando nodejs

Compilar TypeScript codificar a Javascript usando la versión EcmaScript

TypeScript Admite todas las características de ECMAScript publicadas, y los desarrolladores pueden utilizarlas al programar. Sin embargo, no todas las características nuevas son compatibles con navegadores antiguos, por lo que es posible que deba compilar para una versión anterior de ECMAScript. TypeScript Proporciona opciones de compilación que hacen precisamente eso.

Ejemplo: prueba.ts

var addnumbers = (a, b) => {
    return a+b;
}

addnumbers(10, 20);

Para compilar en la versión ES de su elección, puede usar la opción target o t en su comando de la siguiente manera:

tsc --target ES6  test.ts

OR

tsc -t ES6 test.ts

Por defecto, el compilador clásico tiene como destino ES3. Si desea cambiarlo, puede usar el comando anterior.

Por el momento utilizaremos ES6 como destino:

tsc --target ES6  test.ts

prueba.ts a prueba.js

var addnumbers = (a, b) => {
    return a+b;
}

addnumbers(10, 20);

El código permanece sin cambios, ya que la función flecha que has utilizado es una característica de ES6 y no se modifica al compilarse a ES6.

Por defecto, el destino es ES3, por lo que sin un destino se obtiene test.js como:

var addnumbers = function (a, b) {
    return a + b;
};
addnumbers(10, 20);

Así que aquí, la flecha gruesa se cambia por una función anónima normal.

💡 Consejo: En lugar de pasar opciones en la línea de comandos cada vez, ejecute tsc --init para generar un archivo tsconfig.json. El compilador lee entonces la configuración de destino, directorio de salida y configuración estricta de ese archivo para todo el proyecto.

Variables en TypeScript

Variables se utilizan para almacenar valores y el valor puede ser una cadena, un número, un valor booleano o una expresión. Cuando se trata de variables en TypeScript, son similares a JavaScript. Así que aprendamos a declarar y asignar un valor a las variables en TypeScript.

Las variables no se pueden usar en el código sin estar definidas. Para declarar una variable puedes usar

var palabra clave,

let keyword

const keyword

Trabajar con variables en TypeScript es parecido a JavaScript y usuarios familiarizados con JavaA Script le resultará muy fácil. En el código moderno, let y const son preferidos sobre var, porque su ámbito de bloque previene toda una clase de errores.

Declarar variables usando var

Sintaxis:

var firstname = "Roy";

Echemos un vistazo a algunos TypeScript ejemplos para comprender el funcionamiento de la palabra clave var y también el alcance de las variables declaradas usando la var palabra clave.

Ejemplo 1:

var k = 1; // variable k will have a global scope

function test() {
    var c = 1; // variable c is local and accessible only inside function test
    return k++;
}

test(); // output as 1
test(); // output as 2
alert(c); // will throw error, Uncaught ReferenceError: c is not defined

Ejemplo 2:

var t = 0; // variable t is declared in global scope
function test() {
    var t = 10; // t is redeclared inside the function, so changes stay local
    return t;
}
test(); // will return 10
console.log(t); // will console 0

Ejemplo 3:

var i = 0;
function test() {
    if (i > 0) {
      var t = 1;
    }
    return t;
}

test(); // returns undefined. The if block did not run, yet t is still declared
        // because var declarations are hoisted to the whole function.
i++;    // value of i is incremented
test(); // since i > 0 the if block runs and the value returned is 1

Declarar variables usando let

El TypeScript La sintaxis de let es la siguiente:

Sintaxis:

let name = "Roy";

El funcionamiento de la let La variable es casi lo mismo que var, pero con una diferencia importante, que el siguiente ejemplo demuestra.

Ejemplo:

let i = 1;
function test() {
    if (i > 0) {
	  let t = 1;
    }
    return t;
}

test(); // throws an error: Cannot find name 't'

Lo anterior TypeScript El ejemplo genera un error, pero el mismo código habría funcionado con el var palabra clave. Variables declaradas usando let Están disponibles únicamente dentro del bloque en el que se declaran. En este ejemplo, t existe solo dentro del bloque if, no en toda la función.

Lo mismo se aplica dentro de cualquier función, bucle for, bucle while o bloque switch. Una variable let solo está disponible dentro de ese bloque, y hacer referencia a ella fuera genera un error. Esta es la principal diferencia entre var y let.

Declarar variables usando const

Const significa variables constantes. Son similares a las variables let, con la diferencia de que una vez asignado un valor, este no se puede modificar. Por lo tanto, una declaración const debe inicializarse en la misma línea.

Sintaxis:

const name = "Roy";

Ejemplo:

const age = "25";
age = "30"; // error: Cannot assign to 'age' because it is a constant

const total; // error: 'const' declarations must be initialized

Por lo tanto, utilice `const` siempre que sepa que el valor asignado no se reasignará. Tenga en cuenta que `const` impide la reasignación del enlace, no la modificación del objeto al que apunta.

tipos en TypeScript

TypeScript es un lenguaje fuertemente tipado, mientras que JavaEl script no lo es. Una variable cuyo valor está definido como una cadena se puede cambiar a un número sin ningún problema en JavaGuion. Lo mismo no se tolera en TypeScript. En TypeScript, el tipo de una variable se define al inicio y, durante toda la ejecución, debe mantener ese tipo. Cualquier cambio conlleva un error de compilación durante la compilación a JavaGuión.

Los siguientes son los tipos básicos:

Tipo Acepta Ejemplo de declaración
número Números enteros, números decimales y fracciones sea ​​a: número = 10;
cadena Solo valores de texto let s: cadena = “hola”;
booleano Verdadero o falso solamente sea ​​b: booleano = verdadero;
cualquier Cualquier valor, no se aplica ninguna comprobación. sea ​​x: cualquiera = 123;
vacío Ausencia de un valor de retorno función f(): void {}

Número

Solo acepta números enteros, decimales, fracciones y valores numéricos similares.

Sintaxis:

let a :number = 10;
let marks :number = 150;
let price :number = 10.2;

Aquí se presentan algunos métodos importantes que se pueden utilizar con tipos de números:

toFixed () – convertirá el número a una cadena de texto y conservará los decimales indicados al método.

Encadenar() – este método convertirá el número en una cadena de texto.

valor de() – este método devolverá el valor primitivo del número.

toPrecision () – este método formateará el número a una longitud especificada.

Ejemplo: con todos los métodos numéricos

let _num :number = 10.345;
_num.toFixed(2);      // "10.35"
_num.valueOf();      // 10.345
_num.toString();     // "10.345"
_num.toPrecision(2); // "10"

Cordón

Cadena: solo valores de cadena.

Sintaxis:

let str :string = "hello world";

Aquí se presentan algunos métodos importantes que se pueden utilizar con tipos de cadena:

  • split() – este método dividirá la cadena en una matriz.
  • charat() – este método devolverá el carácter en el índice dado.
  • índice de() – este método dará la posición de la primera aparición del valor que se le dé.
  • reemplazar() – este método toma 2 cadenas. Busca el primer valor en la cadena y, si está presente, lo reemplaza con el segundo, devolviendo una nueva cadena.
  • recorte() – este método eliminará los espacios en blanco de ambos lados de la cadena.
  • substr() – este método devolverá una parte de la cadena, dependiendo de la posición inicial y la longitud dada.
  • subcadena() – este método devolverá una parte de la cadena, dependiendo de las posiciones inicial y final. El carácter en la posición final se excluye.
  • aMayúsculas() – convertirá la cadena a mayúsculas.
  • aLowerCase() – convertirá la cadena a minúsculas.

Ejemplo:

let _str:string = "Typescript";

_str.charAt(1);                // y
_str.split("");                // ["T","y","p","e","s","c","r","i","p","t"]
_str.indexOf("s");             // 4, gives -1 if the value does not exist
_str.replace("Type", "Coffee"); // "Coffeescript"
_str.trim();                    // "Typescript"
_str.substr(4, _str.length);   // "script"
_str.substring(4, 10);         // "script"
_str.toUpperCase();             // "TYPESCRIPT"
_str.toLowerCase();             // "typescript"

Boolean

Un booleano solo acepta los valores lógicos verdadero y falso. A diferencia de un simple JavaEn el script, los números 0 y 1 no se aceptan porque son de tipo numérico.

Sintaxis:

let status :boolean = true;
let isDone :boolean = false;

let bflag :boolean = 1;
// error: Type 'number' is not assignable to type 'boolean'

Año

Sintaxis:

let a :any = 123
a = "hello world"; // changing type will not give any error.

Variables declaradas usando el cualquier El tipo puede contener una cadena, un número, una matriz, un valor booleano o un valor vacío. TypeScript no generará ningún error de compilación, lo cual es similar a las variables en JavaScript. Utilice el tipo "cualquiera" solo cuando no esté seguro del tipo de valor que se asociará con esa variable, ya que desactiva todas las comprobaciones de ese valor.

Void

El tipo void se utiliza principalmente como tipo de retorno de una función que no devuelve nada.

Sintaxis:

function testfunc():void{
 //code here
}

TypeScript Formación

An Formación in TypeScript es un tipo de dato en el que se pueden almacenar múltiples valores. Aprendamos cómo declarar y asignar valores para operaciones de matrices en TypeScript.

Desde TypeScript Es un lenguaje fuertemente tipado, por lo que debes especificar el tipo de dato de los valores en un array. De lo contrario, se tratará como de tipo cualquiera.

Declarar e inicializar una matriz

Sintaxis:

let nameofthearray : Array<typehere>

Ejemplo

let months: Array<string> = ["Jan", "Feb", "March", "April", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"]; // array with all string values

let years: Array<number> = [2015, 2016, 2017, 2018, 2019]; // array with all numbers

let month_year: Array<string | number> = ["Jan", 2015, "Feb", 2016]; // mixed

let alltypes: Array<any> = [true, false, "Harry", 2000, { "a": "50", "b": "20" }]; // any type

Diferentes formas de acceder a elementos desde una matriz

Para obtener los elementos de una matriz, los valores comienzan desde el índice 0 hasta la longitud de la matriz menos uno.

let years: Array<number> = [2016, 2017, 2018, 2019];
years[0]; // output will be 2016
years[1]; // output will be 2017
years[2]; // output will be 2018
years[3]; // output will be 2019

También puedes obtener los elementos de una matriz usando un TypeScript por la loops, Como se muestra abajo.

El uso de TypeScript en bucle

let years: Array<number> = [2016, 2017, 2018, 2019];
for (let i = 0; i < years.length; i++) {
     console.log(years[i]);
}

Salida:

2016
2017
2018
2019

⚠️ Advertencia: La condición del bucle debe ser i < years.length. Escritura i <= years.length ejecuta una iteración adicional e imprime undefined, porque el último índice válido siempre es la longitud menos uno.

Usando bucle for-in

let years: Array<number> = [2016, 2017, 2018, 2019];
for (let i in years) {
     console.log(years[i]);
}

Salida:

2016
2017
2018
2019

Usando bucle for-of

let years: Array<number> = [2016, 2017, 2018, 2019];
for (let i of years) {
     console.log(i);
}

Salida:

2016
2017
2018
2019

Usando el bucle forEach

let years: Array<number> = [2016, 2017, 2018, 2019];
years.forEach(function(yrs, i) {
  console.log(yrs);
});

Salida:

2016
2017
2018
2019

TypeScript Métodos de matriz

El TypeScript El objeto Array cuenta con numerosas propiedades y métodos que facilitan a los desarrolladores el manejo de arrays de forma sencilla y eficiente. Para obtener el valor de una propiedad, basta con especificar arrayname.property, y para obtener el resultado de un método, basta con especificar arrayname.method().

Miembro Propósito Returns
de largo Número de elementos en el array número
contrarrestar () Reverseel orden de los artículos en su lugar La misma matriz
ordenar() Ordena los artículos en su lugar La misma matriz
popular() Elimina el último elemento El artículo retirado
cambio() Elimina el primer elemento El artículo retirado
empujar() Agrega un valor como último elemento La nueva longitud
concat () Une dos matrices en una sola. Una nueva matriz

Ejemplo de propiedad de longitud

let months: Array<string> = ["Jan", "Feb", "March", "April", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"];

console.log(months.length);  // 12

Ejemplo de método inverso

console.log(months.reverse());
// ["Dec","Nov","Oct","Sept","Aug","July","June","May","April","March","Feb","Jan"]

Ejemplo de método de clasificación

console.log(months.sort());
// ["April","Aug","Dec","Feb","Jan","July","June","March","May","Nov","Oct","Sept"]

Ejemplo de método pop

console.log(months.pop()); // Dec

Ejemplo de método de turno

console.log(months.shift()); // Jan

Ejemplo de método push

let years: Array<number> = [2015, 2016, 2017, 2018, 2019];
console.log(years.push(2020)); // 6, the new length
years.forEach(function(yrs, i) {
  console.log(yrs); // 2015, 2016, 2017, 2018, 2019, 2020
});

Ejemplo de método concat

let array1: Array<number> = [10, 20, 30];
let array2: Array<number> = [100, 200, 300];
console.log(array1.concat(array2)); // [10, 20, 30, 100, 200, 300]

clase en TypeScript

TypeScript es un superconjunto de JavaGuion, así que todo lo que sea posible en JavaEl script también es posible en TypeScript. La clase es una característica añadida a partir de ES6. Anteriormente en JavaEn Script, la funcionalidad similar a la de una clase se logró utilizando una función con métodos prototipo para reutilizar código. Usando clases, su código puede acercarse a lenguajes como Java, C# y Pythondonde el código se puede reutilizar fácilmente.

Definición de una clase en TypeScript

Aquí está la sintaxis básica de la clase en TypeScript:

class nameofclass {
     //define your properties here

    constructor() {
     // initialize your properties here
    }

   //define methods for class
}

Ejemplo: un ejemplo práctico en Class

class Students {
    age : number;
    name : string;
    roll_no : number;

    constructor(age: number, name:string, roll_no: number) {
        this.age = age;
        this.name = name;
        this.roll_no = roll_no;
    }

    getRollNo(): number {
        return this.roll_no;
    }

    getName() : string {
        return this.name;
    }

    getAge() : number {
        return this.age;
    }
}

En el ejemplo anterior, tienes una clase llamada Estudiantes. Tiene las propiedades edad, nombre y número de matrícula.

Constructor en un TypeScript Clase

La clase Students definida anteriormente tiene un constructor como se muestra a continuación:

constructor(age: number, name:string, roll_no: number) {
        this.age = age;
        this.name = name;
        this.roll_no = roll_no;
    }

El método constructor tiene los parámetros edad, nombre y número de matrícula. El constructor se encarga de inicializar las propiedades cuando se instancia la clase. Se accede a las propiedades mediante el este vídeo Palabra clave, por ejemplo this.age para acceder a la edad y this.roll_no para acceder al número de matrícula. También puede tener un constructor predeterminado, como se muestra a continuación:

constructor () {}

Métodos dentro de un TypeScript Clase

En la clase Students hay métodos definidos, por ejemplo getRollNo(), getName() y getAge(), que devuelven los valores de las propiedades roll_no, name y age.

getRollNo(): number {
        return this.roll_no;
}

getName() : string {
	return this.name;
}

getAge() : number {
	return this.age;
}

Creación de una instancia de una clase en TypeScript

In TypeScriptPara crear una instancia de una clase, se utiliza el operador `new`. Al crear una instancia con `new`, se obtiene un objeto que puede acceder a las propiedades y métodos de la clase, como se muestra a continuación:

let student_details = new Students(15, "Harry John", 33);
student_details.getAge();  // 15
student_details.getName(); // Harry John

Compilando una TypeScript clase a JavaScript

Puede utilizar el comando tsc como se muestra a continuación para compilar a JavaGuión.

Command: tsc  Students.ts

La salida del JavaEl código del script en compilación es el que se muestra a continuación:

var Students = /** @class */ (function () {
    function Students(age, name, roll_no) {
        this.age = age;
        this.name = name;
        this.roll_no = roll_no;
    }
    Students.prototype.getRollNo = function () {
        return this.roll_no;
    };
    Students.prototype.getName = function () {
        return this.name;
    };
    Students.prototype.getAge = function () {
        return this.age;
    };
    return Students;
}());

In JavaEn el script, la clase se convierte en una función autoinvocada.

Herencia de clase

Las clases se pueden heredar usando el Se extiende palabra clave en TypeScript.

Sintaxis de herencia de clases:

class A {
     //define your properties here

    constructor() {
     // initialize your properties here
    }

   //define methods for class

}

class B extends A {
 //define your properties here

    constructor() {
     // initialize your properties here
    }

   //define methods for class

}

clase B podrá compartir clase A métodos y propiedades.

Aquí tenéis un ejemplo práctico de una clase que utiliza herencia:

class Person {
    name: string;
    age: number;

    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }

    getName(): string {
        return this.name;
    }

    getAge(): number {
        return this.age;
    }
}

class Student extends Person {
    tmarks: number;
    getMarks(): number {
        return this.tmarks;
    }

    setMarks(tmarks) {
        this.tmarks = tmarks;
    }
}

let _std1 = new Student('Sheena', 24);
_std1.getAge();      // output is 24
_std1.setMarks(500);
_std1.getMarks();    // output is 500

Tienes dos clases, Persona y Estudiante. Estudiante hereda de Persona, y el objeto creado a partir de Estudiante puede acceder a sus propios métodos y propiedades, así como a los de la clase de la que hereda.

Ahora vamos a añadir algunos cambios a la clase anterior.

Ejemplo:

class Person {
    name: string;
    age: number;

    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }

    getName(): string {
        return this.name;
    }

    getAge(): number {
        return this.age;
    }
}

class Student extends Person {
    tmarks: number;
    constructor(name: string, age: number, tmarks: number) {
        super(name, age);
        this.tmarks = tmarks; // the derived property must be assigned too
    }
    getMarks(): number {
        return this.tmarks;
    }

    setMarks(tmarks) {
        this.tmarks = tmarks;
    }
}

let _std1 = new Student('Sheena', 24, 500);
_std1.getAge();   // output is 24
_std1.getMarks(); // output is 500

La diferencia con respecto al ejemplo anterior radica en un constructor definido en la clase Student. Este constructor recibe los mismos parámetros que la clase base, además de cualquier parámetro adicional propio.

In TypeScript Debes llamar a `super` con todos los parámetros de la clase base. Esta debe ser la primera instrucción dentro del constructor, ya que `super` ejecuta el constructor de la clase derivada. Cualquier propiedad declarada por la clase derivada, como `tmarks`, debe asignarse explícitamente; de ​​lo contrario, `getMarks` devolvería `undefined`.

Modificadores de acceso en TypeScript

TypeScript Admite los modificadores de acceso público, privado y protegido en sus métodos y propiedades. Por defecto, si no se especifica ningún modificador de acceso, el método o la propiedad se consideran públicos y son fácilmente accesibles desde el objeto de la clase.

En el caso de los modificadores de acceso privado, los miembros no están disponibles desde el objeto de la clase y están destinados a ser utilizados únicamente dentro de la clase. No están disponibles para una clase heredada.

En el caso de los modificadores de acceso protegido, los miembros están destinados a ser utilizados dentro de la clase y la clase heredada, y no son accesibles desde el objeto de la clase.

Ejemplo:

class Person {
    protected name: string;
    protected age: number;

    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }

    private getName(): string {
        return this.name;
    }

    getDetails(): string {
        return "Name is " + this.getName();
    }
}

class Student extends Person {
    tmarks: number;
    constructor(name: string, age: number, tmarks: number) {
        super(name, age);
        this.tmarks = tmarks;
    }
    getMarks(): number {
        return this.tmarks;
    }

    getFullName(): string {
        return this.name;
    }

    setMarks(tmarks) {
        this.tmarks = tmarks;
    }
}

let _std1 = new Student('Sheena', 24, 500);
_std1.getMarks();    // output is 500
_std1.getFullName(); // output is Sheena
_std1.getDetails();  // output is Name is Sheena
Cambiar Misma clase Clase derivada Objeto de la clase
público Sí: Sí: Sí:
protegido Sí: Sí: No
de inversores privados Sí: No No

Interfaz en TypeScript

Una de las características principales de TypeScript Las interfaces son conjuntos de reglas que debe implementar la entidad que las utiliza. Esta entidad puede ser una clase, una función o una variable. Una interfaz puede estar compuesta por propiedades y métodos. Se puede marcar una propiedad o un método como opcional mediante el signo de interrogación (?). La interfaz añade una comprobación de tipos estricta para cualquier función, variable o clase que la implemente.

Sintaxis de una interfaz en TypeScript

interface Dimension {
    width: string;
    height: string;
}

Has definido una interfaz llamada Dimension que tiene las propiedades width y height, ambas de tipo string.

Esta interfaz puede implementarse mediante una variable, una función o una clase. Aquí se muestra un ejemplo de una variable que implementa la interfaz Dimensión.

Ejemplo:

interface Dimension {
    width: string;
    height: string;
}

let _imagedim: Dimension = {
    width: "100px",
    height: "200px"
};

La firma de la interfaz Dimension tiene ancho y alto, y ambos son obligatorios. Si falta alguna propiedad o se cambia un tipo, dará un error de compilación al compilar el código. JavaGuión.

El código anterior, cuando se compila a JavaEl script tiene el siguiente aspecto:

var _imagedim = {
    width: "100px",
    height: "200px"
};

Veamos ahora cómo utilizar una interfaz con una función.

Utilizar una interfaz en una función como tipo de retorno

interface Dimension {
    width: string;
    height: string;
}

function getDimension() : Dimension {
    let width = "300px";
    let height = "250px";
    return {
        width: width,
        height: height
    }
}

En el ejemplo anterior, la interfaz Dimension se utiliza como tipo de retorno de la función getDimension(). El valor de retorno debe coincidir con las propiedades y los tipos declarados en la interfaz.

El compilado JavaEl código del script será el siguiente:

function getDimension() {
    var width = "300px";
    var height = "250px";
    return {
        width: width,
        height: height
    };
}

Durante la compilación, si el tipo de retorno no coincide con la interfaz, se producirá un error.

Interfaz como parámetro de función

interface Dimension {
    width: string;
    height: string;
}

function getDimension(dim: Dimension) : string {
    let finaldim  = dim.width + "-" + dim.height;
    return finaldim;
}

getDimension({width:"300px", height:"250px"}); // "300px-250px"

En el ejemplo anterior, se ha utilizado la interfaz Dimension como parámetro de la función getDimension(). Al llamar a la función, el parámetro que se le pasa debe coincidir con las reglas definidas por la interfaz.

El compilado JavaEl código del script será el siguiente:

function getDimension(dim) {
    var finaldim = dim.width + "-" + dim.height;
    return finaldim;
}
getDimension({ width: "300px", height: "250px" });

Clase que implementa una interfaz

Para utilizar una interfaz con una clase, debe usar la palabra clave implementos.

Sintaxis para una clase que implementa una interfaz:

class NameofClass implements InterfaceName {
}

El siguiente ejemplo muestra una interfaz que funciona con una clase.

interface Dimension {
    width : string,
    height: string,
    getWidth(): string;
}

class Shapes implements Dimension {
    width: string;
    height: string;
    constructor (width:string, height:string) {
        this.width = width;
        this.height = height;
    }
    getWidth() {
        return this.width;
    }
}

En el ejemplo anterior, se ha definido la interfaz Dimension con las propiedades width y height, ambas de tipo string, y un método llamado getWidth() que devuelve una cadena.

El compilado JavaEl código del script será el siguiente:

var Shapes = /** @class */ (function () {
    function Shapes(width, height) {
        this.width = width;
        this.height = height;
    }
    Shapes.prototype.getWidth = function () {
        return this.width;
    };
    return Shapes;
}());

Funciones en TypeScript

Las funciones son conjuntos de instrucciones ejecutadas para llevar a cabo una tarea. JavaEn un script, la mayor parte del código está escrito en forma de funciones y estas juegan un papel importante. TypeScript Tienes clases, interfaces, módulos y espacios de nombres disponibles, pero las funciones siguen desempeñando un papel importante. La diferencia entre una función en JavaGuión y TypeScript ¿Están disponibles los tipos de parámetros y de retorno con un TypeScript función.

JavaFunción de script:

function add (a1, b1) {
   return a1+b1;
}

TypeScript función:

function  add(a1 : number, b1: number) : number {
    return a1 + b1;
}

En la función anterior, el nombre de la función es add, los parámetros son a1 y b1, ambos de tipo número, y el tipo de retorno también es un número. Si pasas una cadena a la función, generará un error de compilación al compilar a JavaGuión.

Realizar una llamada a la función: agregar

let x = add(5, 10);   // will return 15
let b = add(5);       // error TS2554: Expected 2 arguments, but got 1
let c = add(3,4,5);   // error TS2554: Expected 2 arguments, but got 3
let t = add("Harry", "John");
// error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'

Los parametros a1 y b1 Son obligatorios y su omisión provocará un error. Los tipos de parámetros y el tipo de retorno son igualmente importantes y no pueden modificarse una vez definidos.

Parámetros opcionales de una función.

In JavaEn el script, todos los parámetros de las funciones son opcionales y se consideran indefinidos si no se pasan. Lo mismo no es cierto en TypeScriptUna vez definidos los parámetros, deberá proporcionarlos. Si desea que un parámetro sea opcional, añada un signo de interrogación después del nombre del parámetro, como se muestra a continuación:

function getName(firstname: string, lastname?: string): string {
    return firstname + lastname;
}

let a = getName("John");              // returns Johnundefined
let b = getName("John", "Harry");     // returns JohnHarry
let c = getName("John", "H", "Harry"); // error TS2554: Expected 1-2 arguments, but got 3

Tenga en cuenta que los parámetros opcionales deben definirse al final. No puede tener el primer parámetro opcional y el segundo obligatorio, ya que el compilador no sabría qué valor se proporcionó.

Asignar valores predeterminados a los parámetros

Puede asignar valores predeterminados a los parámetros como se muestra a continuación:

function getName(firstname: string, lastname = "Harry"): string {
    return firstname + lastname;
}

let a = getName("John");      // will return JohnHarry
let b = getName("John", "H"); // will return JohnH

Al igual que los parámetros opcionales, los parámetros inicializados por defecto también deben mantenerse al final de la lista de parámetros.

Parámetros de descanso

Has visto como TypeScript maneja parámetros obligatorios, parámetros opcionales y parámetros con valores predeterminados. Ahora veremos los parámetros rest. Los parámetros rest son un grupo de parámetros opcionales definidos juntos, usando tres puntos (…) seguido del nombre del parámetro, que es una matriz.

Sintaxis de los parámetros de descanso:

function testFunc(a: string, ...arr: string[]) :string {
    return a + arr.join("");
}

Como se muestra arriba, el parámetro rest es un array precedido por tres puntos. Este array contendrá todos los argumentos restantes que se pasen a la función.

Ejemplo:

let a = testFunc("Monday", "Tuesday", "Wednesday", "Thursday");
// output is MondayTuesdayWednesdayThursday

Funciones de flecha

Una función de flecha es una de las características importantes lanzadas en ES6 y está disponible en TypeScript También. La sintaxis tiene una flecha gruesa, de ahí viene el nombre.

Sintaxis de la función de flecha:

var nameoffunction = (params) => {
 // code here
}

¿Para qué sirve una función flecha?

Veamos un ejemplo para comprender el caso de uso de una función flecha.

Ejemplo:

var ScoreCard = function () {
    this.score = 0;

    this.getScore = function () {
        setTimeout(function () {
            console.log(this.score);    // gives undefined
        }, 1000);
    }
}

var a = new ScoreCard();
a.getScore();

Has creado una función con una propiedad score inicializada a 0, y un método getScore que internamente usa setTimeout y, después de un segundo, registra this.score. El valor registrado es indefinido a pesar de que this.score está definido e inicializado. El problema radica en el este vídeo palabra clave. La función dentro de setTimeout tiene su propio this, y como score no está definido en él, el resultado es indefinido.

Lo mismo se puede lograr usando una función flecha, como se muestra a continuación:

var ScoreCard = function () {
    this.score = 0;

    this.getScore = function () {
        setTimeout(() => {
            console.log(this.score);   // you get 0
        }, 1000);
    }
}

var a = new ScoreCard();
a.getScore();

Una función de flecha no tiene su propia este vídeo y, en cambio, comparte la de su ámbito padre, por lo que las variables declaradas fuera son accesibles con esto dentro de una función flecha. Son útiles por su sintaxis más corta, así como para funciones de devolución de llamada, manejadores de eventos y funciones de temporización.

TypeScript Enumeraciones

A TypeScript Un enum es un objeto que contiene una colección de valores relacionados almacenados juntos. JavaScript no admite enumeraciones de forma nativa. La mayoría de los lenguajes de programación como Java, C y C++ admitir enumeraciones y TypeScript También los hace disponibles. Los enumerados se definen utilizando la palabra clave enum.

¿Cómo declarar una enumeración?

Sintaxis:

enum NameofEnum {
   value1,
   value2,
    ..
}

Ejemplo: enumeración

enum Directions {
    North,
    South,
    East,
    West
}

En el ejemplo anterior, se ha definido una enumeración llamada Direcciones con los valores Norte, Sur, Este y Oeste. Los valores se numeran desde 0 para la primera entrada y aumentan en 1 para cada entrada subsiguiente.

Declara una enumeración con un valor numérico.

Por defecto, si a un miembro de una enumeración no se le asigna un valor, se le asigna un número que comienza en 0. El siguiente ejemplo muestra una enumeración con valores numéricos explícitos.

enum Directions {
North = 0,
South = 1,
East = 2,
West = 3
}

También puede asignar un valor inicial, y los miembros siguientes recibirán valores incrementados. Por ejemplo:

enum Directions {
North = 5,
South, // will be 6
East,  // 7
West   // 8
}

Ahora bien, el norte comienza en 5, por lo que el sur es 6, el este es 7 y el oeste es 8.

También puede asignar valores de su elección en lugar de los predeterminados. Por ejemplo:

enum Directions {
North = 5,
South = 4,
East = 6,
West = 8
}

¿Cómo acceder a una enumeración?

El siguiente ejemplo muestra cómo utilizar una enumeración en su código:

enum Directions {
    North,
    South,
    East,
    West
}

console.log(Directions.North);      // output is 0
console.log(Directions["North"]); // output is 0
console.log(Directions[0]);       // output is North

El compilado JavaEl guion es el siguiente:

var Directions;
(function (Directions) {
    Directions[Directions["North"] = 0] = "North";
    Directions[Directions["South"] = 1] = "South";
    Directions[Directions["East"] = 2] = "East";
    Directions[Directions["West"] = 3] = "West";
})(Directions || (Directions = {}));
console.log(Directions.North);
console.log(Directions["North"]);
console.log(Directions[0]);

Desde JavaEl script no admite enumeraciones; el compilador convierte la enumeración en una función autoinvocada, como se muestra arriba. La doble asignación es lo que crea el mapa inverso.ping del número al nombre.

Declara una enumeración con un valor de cadena.

Puedes asignar valores de cadena de texto a tu elección, como se muestra en el ejemplo siguiente.

Ejemplo:

enum Directions {
    North = "N",
    South = "S",
    East = "E",
    West = "W"
}

console.log(Directions.North);      // output is N
console.log(Directions["North"]); // output is N
console.log(Directions[0]);       // output is undefined

El compilado JavaEl guion es el siguiente:

var Directions;
(function (Directions) {
    Directions["North"] = "N";
    Directions["South"] = "S";
    Directions["East"] = "E";
    Directions["West"] = "W";
})(Directions || (Directions = {}));
console.log(Directions.North);
console.log(Directions["North"]);
console.log(Directions[0]);

⚠️ Advertencia: Las enumeraciones de cadena no tienen mapa inverso.pingCompare las dos salidas compiladas anteriores: la enumeración numérica almacena ambas direcciones, mientras que la enumeración de cadena almacena solo el nombre al valor. Por eso Directions[0] Devuelve undefined para una enumeración de cadena.

¿Cuáles son los módulos en TypeScript?

Archivos creados en TypeScript tienen acceso global, lo que significa que las variables declaradas en un archivo pueden ser accedidas en otro archivo. Esta naturaleza global puede causar conflictos de código y problemas en tiempo de ejecución. La funcionalidad de exportación e importación de módulos puede usarse para evitar conflictos de variables y funciones globales. Esta característica llegó en JavaScript con la versión ES6 y también es compatible con TypeScript.

¿Por qué necesitas módulos en TypeScript?

El siguiente ejemplo muestra el problema sin módulos.

Ejemplo prueba1.ts

let age : number = 25;

Ha definido una edad variable de tipo número en test1.ts.

Ejemplo prueba2.ts

En test2.ts puedes acceder a la variable edad Definido en test1.ts y también modificado, como se muestra a continuación:

age = 30; // changed from 25 to 30.
let _new_age = age;

Esto puede generar muchos problemas, ya que las variables están disponibles globalmente y pueden modificarse desde cualquier lugar.

Con módulosEl código escrito permanece local al archivo y no se puede acceder a él desde fuera. Para compartir cualquier elemento de un archivo, este debe exportarse mediante la palabra clave `export`. Exportar Se utiliza cuando se desea que una variable, clase, función o interfaz se utilice en otro archivo. Importar Se utiliza cuando se desea acceder a un elemento exportado. De esta forma, el código permanece intacto dentro del archivo, e incluso si se definen los mismos nombres de variables, no se mezclan.

Usando Exportar e Importar

Existen muchas formas de exportar e importar. Analizaremos la sintaxis más utilizada.

La sintaxis para importar y exportar 1:

export  nameofthevariable or class name or interface name etc

//To import the above variable or class name or interface you have to use import as shown below:

import {nameofthevariable or class name or interfacename} from "file path here without .ts"

A continuación se muestra un ejemplo práctico que utiliza exportar e importar.

prueba1.ts

export let age: number = 25;

La palabra clave `export` se utiliza para compartir la variable de edad con otro archivo.

prueba2.ts

import { age } from "./test1"
let new_age :number = age;

La palabra clave import se utiliza para acceder a edad variable y debe especificar la ubicación del archivo como se muestra arriba.

Sintaxis para importar y exportar 2:

Existe otra forma de exportar e importar, y la sintaxis es la que se muestra a continuación:

export = classname;

import classname = require("file path of modulename")

Cuando estas usando exportar = Para exportar su módulo, la importación debe usar require(“ruta del archivo del nombre del módulo”).

Aquí hay un ejemplo práctico que ilustra ese caso.

Cliente.ts

class Customer {
    name: string;
    age: number;

    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }

    getName(): string {
        return this.name;
    }
}

export = Customer;

pruebaCliente.ts

import Customer = require("./Customer");

let a = new Customer("Harry", 30);
alert(a.getName());

Cargador de módulos

Los módulos no pueden funcionar por sí solos, por lo que necesita un cargador de módulos para localizar las dependencias de importación, como se ve en el TypeScript ejemplos anteriores. Los cargadores de módulos disponibles son CommonJS para Node.js y Require.js para ejecutarse en el navegador.

Para compilar código utilizando el formato de módulo CommonJS, utilice el siguiente comando:

tsc --module commonjs testCustomer.ts

Para compilar código utilizando el formato de módulo Requirejs, utilice el siguiente comando:

tsc --module amd testCustomer.ts

Los archivos dependientes se convertirán a archivos js con el comando anterior.

Ejemplo de conversión de testCustomer.ts a testCustomer.js usando Requirejs

define(["require", "exports", "./Customer"], function (require, exports, Customer) {
    "use strict";
    exports.__esModule = true;
    var a = new Customer("Harry", 30);
    alert(a.getName());
});

Ejemplo de conversión de Customer.ts a Customer.js usando Requirejs

define(["require", "exports"], function (require, exports) {
    "use strict";
    var Customer = /** @class */ (function () {
        function Customer(name, age) {
            this.name = name;
            this.age = age;
        }
        Customer.prototype.getName = function () {
            return this.name;
        };
        return Customer;
    }());
    return Customer;
});

Para probarlo usando require.js, necesitas crear un archivo llamado main.js que haga referencia a las dependencias como se muestra.

Aquí está la estructura de carpetas:

src/
    Customer.js
    testCustomer.js
    main.js
    require.js  // you can get this file from github or npm install requirejs
    test.html

principal.js

define(function (require) {
    var customer = require("./Customer");
    var testCustomer = require("./testCustomer");
});

test.html

<!DOCTYPE html>
<html>
<head>
    <title>TypeScript Module testing using Requirejs</title>
    <script data-main="main" src="require.js"></script>
</head>
<body>
    <h3>Testing modules using Requirejs</h3>
</body>
</html>

Cargador de módulos

Espacios de nombres en TypeScript

Un espacio de nombres contiene una colección de clases, interfaces, variables y funciones juntas en un solo archivo.

Sintaxis del espacio de nombres

namespace name{

export class {
}

export interface {
}

export const constname;

}

El código relacionado está disponible bajo un mismo espacio de nombres.

Ejemplo de trabajo del espacio de nombres: testnamespace.ts

namespace StudentSetup {

    export interface StudDetails {
        name: string;
        age: number;
    }

    export function addSpace(str) { // will add space to the string given
        return str.split("").join(" ");
    }

    export class Student implements StudDetails {
        name: string;
        age: number;

        constructor(studentdetails: StudDetails) {
            this.name = studentdetails.name;
            this.age = studentdetails.age;
        }

        getName(): string {
            return this.name;
        }
    }
}

El nombre del espacio de nombres es Configuración del estudiantey has añadido una interfaz StudDetails, una función addSpace y una clase llamada Student.

Acceso a un espacio de nombres

A continuación se muestra el código donde se utiliza el espacio de nombres. Configuración del estudiante.

pruebaStudentSetup.ts

let a = new StudentSetup.Student({ name: "Harry", age: 20 });

console.log("The name is :" + StudentSetup.addSpace(a.getName()));

La clase, interfaz o función disponible dentro de un espacio de nombres debe referenciarse utilizando el nombre del espacio de nombres, por ejemplo StudentSetup.addSpace para acceder a la función y ConfiguraciónEstudiante.Estudiante para acceder a la clase.

Puedes compilar ambos archivos en un único archivo js como se muestra a continuación:

tsc --outFile namespace.js testnamespace.ts  testStudentSetup.ts

Compruebe la salida en la línea de comandos utilizando el siguiente comando:

node namespace.js

Salida:

The name is :H a r r y

Declaraciones ambientales en TypeScript

TypeScript te permite usar terceros JavaArchivos de script que utilizan declaraciones ambientales. La ventaja de esta característica es que no es necesario reescribir la biblioteca y, sin embargo, se pueden utilizar todas sus características con comprobación de tipos. TypeScript.

Sintaxis ambiental

Para declarar un módulo ambiental:

declare module moduleName {
   //code here
}

El archivo de entorno debe guardarse como:

filename.d.ts

Para usar el archivo nombre de archivo.d.ts En tu archivo .ts debes hacer referencia a él de la siguiente manera:

/// <reference path="filename.d.ts"/>

La declaración de tipo ambiental en TypeScript Se refiere a la biblioteca de terceros y redeclara las funciones requeridas con sus propios tipos. Por ejemplo, considere el pequeño JavaBiblioteca de scripts que se muestra a continuación.

Terceros JavaArchivo de script: testString.js

var StringChecks = {
    isString: function (str) {
        return typeof str === "string";
    },

    convertToUpperCase: function (str) {
        return str.toUpperCase();
    },

    convertToLowerCase: function (str) {
        return str.toLowerCase();
    },

    convertToStringBold: function (str) {
        return str.bold();
    }
};

Tienes un objeto llamado StringChecks que tiene las funciones isString, convertToUpperCase, convertToLowerCase y convertToStringBold.

Creación de un módulo ambiental en TypeScript

Ahora crearemos un módulo ambiental que haga referencia al JavaEl script funciona como se indica arriba y agrega comprobaciones de tipo según sea necesario.

Nombre de archivo: tstring.d.ts

declare module TestString {

    export interface StringsFunc {
        isString(str: string): boolean;
        convertToUpperCase(str: string): string;
        convertToLowerCase(str: string): string;
        convertToStringBold(str: string): string;
    }
}

declare var StringChecks: TestString.StringsFunc;

Se define un módulo llamado TestString y se exporta la interfaz StringsFunc. Cada firma indica qué acepta y qué devuelve la función:

  • isString(cadena: cadena): booleano – Recibe una cadena de texto y devuelve un valor booleano. Si se le pasa un número o cualquier otro tipo, se producirá un error de compilación.
  • convertirAMayúsculas(str: cadena): cadena – Recibe una cadena de texto y devuelve una cadena de texto.
  • convertiraMinúsculas(str: cadena): cadena – Recibe una cadena de texto y devuelve una cadena de texto.
  • convertToStringBold(cadena: cadena): cadena – Recibe una cadena de texto y devuelve una cadena de texto.

Puesto que el JavaEl archivo de script expone el nombre del objeto StringChecks, y finalmente nos referimos al mismo nombre en el archivo .d.ts:

declare var StringChecks: TestString.StringsFunc;

Utilizando un módulo Ambient en TypeScript

Aquí está el archivo test.ts que utiliza el archivo de entorno tstring.d.ts.

/// <reference path="tstring.d.ts"/>
let str1 = StringChecks.isString("Hello World");
console.log(str1);
let str2 = StringChecks.convertToUpperCase("hello world");
console.log(str2);
let str3 = StringChecks.convertToLowerCase("HELLO");
console.log(str3);
let str4 = StringChecks.convertToStringBold("Hello World");
console.log(str4);

Compila con tsc test.ts para generar test.js:

/// <reference path="tstring.d.ts"/>
var str1 = StringChecks.isString("Hello World");
console.log(str1);
var str2 = StringChecks.convertToUpperCase("hello world");
console.log(str2);
var str3 = StringChecks.convertToLowerCase("HELLO");
console.log(str3);
var str4 = StringChecks.convertToStringBold("Hello World");
console.log(str4);

Ahora puedes usar test.js en un archivo HTML junto con el archivo de biblioteca testString.js.

<html>
<head>
    <title>Test TypeScript Ambient</title>
    <script src="testString.js"></script>
    <script src="test.js"></script>
</head>
<body>
</body>
</html>

Salida:

true
HELLO WORLD
hello
<b>Hello World</b>

💡 Consejo: Para las bibliotecas populares, rara vez necesitará escribir usted mismo un archivo .d.ts. En su lugar, instale los tipos mantenidos por la comunidad, por ejemplo npm install --save-dev @types/lodashy el compilador los detecta automáticamente.

Para continuar, compare los dos idiomas directamente en TypeScript vs JavaScript, volver a visitar JavaMétodos de matriz de script para los equivalentes no tipificados utilizados aquí, y estudio bucles en JavaScript y interno y externo JavaScript para los fundamentos del navegador en los que se basa la salida compilada.

Preguntas Frecuentes

No. Un navegador ejecuta JavaSolo se puede usar el script, por lo que el archivo .ts debe compilarse primero con tsc o un empaquetador. Las anotaciones de tipo se borran durante ese paso y no tienen ningún coste en tiempo de ejecución.

Sí. Habilita allowJs en tsconfig.json y renombra los archivos uno por uno. Porque cada JavaEl archivo de script ya es válido. TypeScriptEl proyecto continúa compilándose durante toda la migración.

Una interfaz se puede reabrir y extender, y es la opción habitual para las formas de los objetos. Un alias de tipo también abarca uniones, tuplas y tipos primitivos, que las interfaces no pueden expresar.

Utilice módulos con funciones de exportación e importación. Los espacios de nombres son anteriores a los módulos ES y siguen siendo útiles principalmente para archivos de declaración y bases de código antiguas basadas en scripts.

Sí, de forma cuantificable. El compilador rechaza inmediatamente las propiedades ficticias y los tipos de argumentos incorrectos, por lo que un fragmento generado realiza comprobaciones de tipo o informa exactamente dónde está el error.

Las integraciones del editor incorporan los tipos circundantes y los archivos .d.ts al contexto del modelo. Por lo tanto, las anotaciones más completas producen autocompletados más precisos que el código con tipado débil.

Resumir este post con: