¡Esta es una revisión vieja del documento!
<code typescript> /* Inicializar un paquete: npm init -y Añadir el compilador typescript npm add -s typescript Ejecutar el compilador typescript npx tsc Inicializar projecto typescript con codigo en src y salida en lib npx tsc –init –rootdir src –outdir lib Ahora la ejecución compila el codigo npx tsc Dejarlo compilando npx tsc –watch */
let message: string = “Hello world”; console.log(message);
/* “use strict”; let message = “Hello world”; console.log(message); */
– Primitives let isPresent: boolean = true; let beast: number = 66.4566; let anotherNumber: string = beast.toPrecision(1); let notDefined: undefined = undefined; let notPresent: null = null; let penta: symbol = Symbol('star'); let biggy: bigint = 9007199254740991n; – List classes let array: Array<number> = [1, 2, 3]; let array2: number[] = [1, 2, 3]; let set: Set<number> = new Set([1, 2, 3]);
– Generics class Queue<T> { private data: Array<T> = []; push(item: T) { this.data.push(item); } pop(): T | undefined { return this.data.shift(); } } let queue: Queue<number> = new Queue(); queue.push(33); – Tuples let tuple: [number, number] = [0, 0]; [0, 0, 0] is an error – Types and type alias let center: {x: number, y: number} = {
x: 0, y: 0
};
type Point = {x: number, y: number}; let center2: Point = {x: 0, y: 0};
– Functions function add(a: number, b: number): number { return a + b; } function log(message: string): void { console.log(message); } function sum(…values: number[]) {} let addFunction: (a: number, b: number) ⇒ number; addFunction = add; – Structural typing type User = { id: string }; type Product = { id: string };
let user: User = { id: “1” }; let product: Product = { id: “3” } ; let user2: User = product; No error type Point2D = { x: number, y: number }; type Point3D = { x: number, y: number, z: number}; let p2: Point2D = { x: 0, y: 0 }; let p3: Point3D = { x: 1, y: 1, z: 1 }; p2 = p3; No error. p3 = p2 ← error function takePoint2D (point: Point2D) {} takePoint2D(p3);
– Classes class Animal { private name: string; protected position: number; #last_name: string; This is also private, but `private` is prefered
constructor(name: string) {
this.name = name;
this.position = 0;
this.#last_name = "Toby";
}
public move(meters: number): void { this.position += meters; }
} class Bird extends Animal { Having private position would not work fly (miles: number): void { this.position += (miles * 0.0006); } } let cat = new Animal(“cat”); cat.move(10); – Any and Unknown let exampleAny: any = 333; let exampleUnknown: unknown = 333; safer exampleAny.allow.anything(); let bBoolean: boolean = exampleAny; exampleUnknown.does.not.allow(); exampleUnknown.trim(); does not allow this either if (typeof exampleUnknown == 'string') { exampleUnknown.trim() }
– Type assertion and casts import { load } from “./test.js” we require to “allowJS” in tsconfig.json let varLoaded = load(); const trimmed: string = (varLoaded as string); assertion let strVariable: string = “1992”; let numVariable: number = +strVariable; cast let bVariable: boolean = (numVariable == 1992);
/*
When you want to use an external variable, like process.env from node. We will do a declaration: declare const process: any; There is a way to directly define those external variables in a non invasive way: - You can set them in `env.d.ts` file. But if you are going to use node typing, the best way is to install the `@types/node` package. With this, it is not required to import those variables. For example, with Express.js: `@types/express`
However, for using TypeScript on node we will make use of ts-node package.
JS: If you create this class: class Person {
growOld() { this.whatever }
} And you use a person instance with: const growOld = person.growOld(), `this` is lost. For maintaining the `this` context growOld must be defined like this: class Person {
growOld = () => { this.whatever }
} */
– Readonly type XValue = { readonly x: number; } let xvalue: XValue = {x: 33} xvalue.x = 33; this gives an error
– Unions function format(input: string | string[]) : void {} Accepts string or string array
– Literals let direction: 'North' | “South” | “East” | “West”; direction = 'North'; direction = 'north'; error
class Cat { meow() {}} class Dog { bark() {}} type Pet = Cat | Dog; let pet: Pet = new Cat() if (pet instanceof Cat) pet.meow();
– Discrimination type Circle = { kind: 'circle', This can be a boolean. The real example is with isValid: true, and then isValid: False
validatedValue: string,
};
type Square = {
kind: 'rectangle', errorReason: string,
};
type Figure =
| Circle | Square;
function logResult(result: Figure) {
if (result.kind == 'circle') {
console.log('Success, validated value:', result.validatedValue);
}
if (result.kind == 'rectangle') {
console.error('Failure, error reason:', result.errorReason);
}
}
– parameter properties class Person { constructor (public name: string, public age: number) {} } const adam = new Person('Adam', 12000); console.log(adam.name); Prints Adam
– Intersection types type Another2D = { x: number, y: number } type Another3D = Another2D & { z: number } let aP3D = {x: 2, y: 3, z: 4} type AnotherPerson = { name: string } type Email = { email: string} function contact(data: AnotherPerson & Email) {} contact({name: “hola”, email: “a@b.com”}) type ContactData = AnotherPerson & Email; function contact2(data: ContactData) {} – Optionals
type APerson = {name: string, email: string, phone?: string }; const alfred: APerson = {name: “alfred”, email: “a@a.com”}
– Not null type Position = {x: number, y?: number | null | undefined} let p: Position = {x: 33} console.log(p.y!) – Interfaces
interface Location2D {
x: number, y: number
}
interface Location2D { this is merged xy: string } interface Location3D extends Location2D { z: number } let location: Location3D = {x: 0, y: 0, z: 0, xy: “00”} – never let example: never; —- type Square1 = { kind: 'square', size: number, }; type Rectangle1 = { kind: 'rectangle', width: number, height: number, }; type Circle1 = { kind: 'circle', radius: number, }; type Shape1 = | Square1 | Rectangle1 | Circle1; function area(s: Shape1) { if (s.kind === 'square') { return s.size * s.size; } else if (s.kind === 'rectangle') { return s.width * s.height; } else if (s.kind === 'circle') { return Math.PI * (s.radius ** 2); } const _ensureAllCasesAreHandled: never = s; this is an assert. It will raise a TS error if we do not handle a type
return _ensureAllCasesAreHandled; }
<code>