TypeScript Cheat Sheet en Español

cheat sheet en español de typescript

Guía de referencia rápida de TypeScript 4.3

Operadores
??
Fusión nula
function getValue(val?: number): number | 'nil' {
  // Devolverá 'nil' si 'val' es falso (incluido 0)
  // retorna val || 'nil';
        
  // Solo devolverá 'nil' si 'val' es null o undefined
  return val ?? 'nil';
} 
?.
Encadenamiento opcional
function countCaps(value?: string) {
  // La expresión 'value' no estará definida si 'value' es null o
  // undefined, o si la llamada 'match' no encuentra nada
  return value?.match(/[A-Z]/g)?.length ?? 0;
} 
!
(afirmación nula)
let value: string | undefined;
    
// Código que estamos seguros que se inicializará y 'value'
// no se será undefined
// Afirmamos que 'value' está definido 
console.log(`value tiene ${value!.length} caracteres de largo`);
&&=
Operado asignación lógica AND
let a;
let b = 1;
  
// asignar un valor solo si el valor actual es verdadero
  
a &&= 'default'; // a es undefined 
b &&=  5; // b ahora es 5 
||=
Operador de asignación lógica OR
let a;
let b = 1;
      
// asigna un valor solo si el valor actual es falso
      
a ||= 'default'; // a ahora es 'default'
b ||=  5; // b es todavia 1
??=
Operador de asignación nula
let a;
let b = 0;
    
// asignar un valor solo si el valor actual es null o undefined
    
a ??= 'default'; // a es ahora 'default'
b ??=  5; // b sigue siendo 0 
Tipos básicos
Sin tipo
any
Una cadena
string
Un valor verdadero / falso
boolean
Un valor no primitivo
object
Valor no inicializado
undefined 
Valor explícitamente vacío
null
Nulo o indefinido (generalmente solo se usa para retornos de funciones)
void 
Un valor que nunca puede ocurrir
never 
Un valor con un tipo desconocido
unknown
Tipos de objetos
Object
{
  requiredStringVal: string;
  optionalNum?: number;
  readonly readOnlyBool: bool; 
}
Objeto con propiedades de cadena arbitrarias (como un mapa hash o un diccionario)
{ [key: string]: Type; }
{ [key: number]: Type; } 
Tipos literales
String
let direction: 'left' | 'right';
Number
let roll: 1 | 2 | 3 | 4 | 5 | 6; 
Arrays y tuplas
Array de strings
string[]
// o
Array
Array de funciones que devuelven strings
(() => string)[]
  
// o
  
{ (): string; }[]
  
// o
  
Array<() => string> 
Tuplas básicas
// opcion 1
let myTuple: [ string, number, boolean? ];
  
// opcion 2
myTuple = [ 'test', 42 ];
 
Tuplas variádicas
type Numbers = [number, number];
type Strings = [string, string];
      
type NumbersAndStrings = [...Numbers, ...Strings]; 
// [number, number, string, string]
  
type NumberAndRest = [number, ...string[]];
// [number, variable  number de string] 
  
type RestAndBoolean = [...any[], boolean]; 
// [variable number de any, boolean] 
Tuplas con nombre
type Vector2D = [x: number, y: number];
function createVector2d(...args: Vector2D) {} 
// function createVector2d(x: number, y: number): void
Funciones
Función
(arg1: Type, argN: Type) => Type;
  
// o
  
{ (arg1: Type, argN: Type): Type; }
Constructor
new () => ConstructedType;
            
// o
            
{ new (): ConstructedType; } 
Función con parámetro opcional
(arg1: Type, optional?: Type) => ReturnType 
Función con parámetro de rest
(arg1: Type, ...allOtherArgs: Type[]) => ReturnType 
Función con propiedad estática
{ (): Type; staticProp: Type; }
Función con argumento por defecto
function fn(arg1 = 'default'): ReturnType {}
Función flecha
(arg1: Type): ReturnType => { ...; return value; }
  
// o
            
(arg1: Type): ReturnType => value; 
Tipo this
function fn(this: Foo, arg1: string) {}
Sobrecarga de funciones
function conv(a: string): number;
function conv(a: number): string;
function conv(a: string | number): string | number {
    ...
}
Tipos de unión e intersección
Unión
let myUnionVariable: number | string; 
Intersección
let myIntersectionType: Foo & Bar; 
Tipos nombrados
Interface
interface Child extends Parent, SomeClass {
    property: Type;
    optionalProp?: Type;
    optionalMethod?(arg1: Type): ReturnType;}
 
Clase
class Child extends Parent implements Child, OtherChild {
  property: Type;

  defaultProperty = 'default value';

  private _privateProperty: Type;

  private readonly _privateReadonlyProperty: Type;

  static staticProperty: Type;


  constructor(arg1: Type) {
      super(arg1);
  }

  private _privateMethod(): Type {}

  methodProperty: (arg1: Type) => ReturnType;

  overloadedMethod(arg1: Type): ReturnType;

  overloadedMethod(arg1: OtherType): ReturnType;

  overloadedMethod(arg1: CommonT): CommonReturnT {}

  static staticMethod(): ReturnType {}

  subclassedMethod(arg1: Type): ReturnType {
      super.subclassedMethod(arg1);
  }
} 
Enum
enum Options {
  FIRST,
  EXPLICIT = 1,
  BOOLEAN = Options.FIRST | Options.EXPLICIT,
  COMPUTED = getValue()
}
  
enum Colors {
  Red = "#FF0000",
  Green = "#00FF00",
  Blue = "#0000FF"
}
Type alias
type Name = string;
  
type Direction = 'left' | 'right';
  
type ElementCreator = (type: string) => Element;
  
type Point = { x: number, y: number };
  
type Point3D = Point & { z: number };
  
type PointProp = keyof Point; // 'x' | 'y'
  
const point: Point = { x: 1, y: 2 };
  
type PtValProp = keyof typeof point; // 'x' | 'y'
 
Genéricos
Función usando parámetros de tipo
(items: T[], callback: (item: T) => T): T[] 
Interfaz con múltiples tipos
interface Pair<t1, t2=""> {
    first: T1;
    second: T2;
}
Parámetro de tipo restringido
(): T 
Parámetro de tipo predeterminado
(): T 
Parámetro de tipo restringido y predeterminado
(): T
Tuplas genéricas
type Arr = readonly any[];
    
function concat(a: N, b: V): [...N, ...V] { 
   return [...a, ...b]
}
    
const strictResult = concat([1, 2] as const, ['3', '4'] as const);
const relaxedResult = concat([1, 2], ['3', '4']);
    
// strictResult es de tipo [1, 2, '3', '4']
// relaxedResult es de tipo (string | number)[]
Tipos de índice, maps y condicionales
Consulta de tipo de índice (keyof)
type Point = { x: number, y: number };
let pointProp: keyof Point = 'x';
  
function getProp<t, k="" extends="" keyof="" t="">(
  val: T,
  propName: K
): T[K] { ... } 
Tipos map
type Stringify = { [P in keyof T]: string; }
type Partial = { [P in keyof T]?: T[P]; } 
Tipos condicionales
type Swapper = 
(value: T) => T extends number ? string : number;
  
// es equivalente a
  
(value: number) => string
  
// si T es un número, o
  
(value: string) => number
// si T es una cadena
 
Tipos condicionales map
interface Person {
  firstName: string;
  lastName: string;
  age: number;
}
  
type StringProps = {
   [K in keyof T]: T[K] extends string ? K : never;
};
  
type PersonStrings = StringProps;
  
// PersonStrings es "firstName" | "lastName"
 
Otros tipos útiles
Partial
Partial<{ x: number; y: number; z: number; }>
  
// es equivalente a
  
{ x?: number; y?: number; z?: number; } 
Readonly
Readonly<{ x: number; y: number; z: number; }>
  
//es equivalente a
  
{
  readonly x: number;
  readonly y: number;
  readonly z: number;
}
Pick
Pick<{ x: number; y: number; z: number; }, 'x' | 'y'>
  
// es equivalente a
  
{ x: number; y: number; } 
Record
Record<'x' | 'y' | 'z', number>
  
// es equivalente a
  
{ x: number; y: number; z: number; }
Exclude
type Excluded = Exclude;
    
// es equivalente a
    
number 
Extracted
type Extracted = Extract;
  
// es equivalente a
  
string
 
NonNullable
type NonNull = NonNullable;
  
// es equivalente a
  
string | number
ReturnType
type ReturnValue = ReturnType<() => string>;
  
// es equivalente a
  
string
InstanceType
class Renderer() {}
type Instance = InstanceType;
  
// es equivalente a
  
Renderer
Tipos de Guards
Type predicates
function isThing(val: unknown): val is Thing {
  // retorna true si val es de tipo Thing
}
  
if (isThing(value)) {
  // value es de tipo Thing
} 
typeof
declare value: string | number;
if (typeof value === "number") {
  // value is of type Number
} else {
  // value is a string
}
instanceof
declare value: Date | Error;
if (value instanceof Date) {
    // value is a Date
} else {
    // value is an Error
} 
in
interface Dog { woof(): void; }
interface Cat { meow(): void; }

function speak(pet: Dog | Cat) {
  if ('woof' in pet) {
      pet.woof()
  } else {
      pet.meow()
  }
}
Assertions
De tipo
let val = someValue as string;
  
// o
  
let val = someValue;
 
const
Valor inmutable
let point = { x: 20, y: 30 } as const;
  
// o
  
let point = { x: 20, y: 30 }; 
Declaraciones de ámbito
Global
declare const $: JQueryStatic;
Módulo
declare module "foo" {
  export class Bar { ... }
}
Módulo comodín
declare module "text!*" {
  const value: string;
  export default value;
}
 
Comentarios para el compilador
No revisar este archivo
// @ts-nocheck
Verificar este archivo (JS)
// @ts-check 
Ignora la siguiente línea
// @ts-ignore 
Espere un error en la siguiente línea
// @ts-expect-error 
Directivas triple slash
Tipos incorporados de referencia
/// <reference lib="es2016.array.include" />
Referencia a otros tipos
/// <reference path="../my_types" />
/// <reference types="jquery" />
AMD
/// <amd-module name="Name" />
/// <amd-dependency path="app/foo" name="foo" /> 
Uso
Instalación Para la última versión estable:
$ npm install typeScript
Ejecutar
npx tsc
Ejecutar con una configuración específica
npx tsc --project configs/my_tsconfig.json

benjamin
Me llamo Benjamín Gonzales B, soy desarrollador de software con más de 15 años de experiencia, socio funduador de la empresa GNBIT. Me apasiona todo lo relacionado a las nuevas tecnologías, me gusta investigar , leer y aprender cada día algo nuevo. Desarrollo en PHP7+, JAVA, C#, JavaScript, entre otros y actualmente  estoy experimentando con lenguajes funcionales como: Erlang, Clojure y Scala 

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.