Consultas de tipo
Las consultas de tipo son una forma de acceder a las propiedades de un tipo en TypeScript. Esto es útil para obtener el tipo de una propiedad, o para "extraer" el tipo de una propiedad de un objeto.
Keyof
keyof es un operador que devuelve el tipo de todas las claves de un objeto. Por ejemplo:
type Point = {
x: number;
y: number;
};
type PointKeys = keyof Point;
// PointKeys es "x" | "y"type Point = {
x: number;
y: number;
};
type PointKeys = keyof Point;
// PointKeys es "x" | "y"En caso de que el tipo sea unión de tipos, keyof devolverá la unión de las claves de todos los tipos.
type Point3D = Point & { z: number };
type Point3DKeys = keyof Point3D;
// Point3DKeys es "x" | "y" | "z"type Point3D = Point & { z: number };
type Point3DKeys = keyof Point3D;
// Point3DKeys es "x" | "y" | "z"Si tenemos un indice de tipo, keyof devolverá el tipo de las claves del indice.
type Dictionary<T> = {
[key: string]: T;
};
type DictionaryKeys = keyof Dictionary<number>;
// DictionaryKeys es stringtype Dictionary<T> = {
[key: string]: T;
};
type DictionaryKeys = keyof Dictionary<number>;
// DictionaryKeys es stringtypeof
typeof es un operador que devuelve el tipo de una expresión. Por ejemplo:
const point = { x: 0, y: 0 };
type Point = typeof point;
// Point es { x: number, y: number }const point = { x: 0, y: 0 };
type Point = typeof point;
// Point es { x: number, y: number }typeof también puede ser usado con clases y funciones.
class Point {
x = 0;
y = 0;
}
type PointType = typeof Point;
// PointType es typeof Point
function add(a: number, b: number) {
return a + b;
}
type AddType = ReturnType<typeof add>;
// AddType es numberclass Point {
x = 0;
y = 0;
}
type PointType = typeof Point;
// PointType es typeof Point
function add(a: number, b: number) {
return a + b;
}
type AddType = ReturnType<typeof add>;
// AddType es numberConsultas de tipo
Las consultas de tipo son una forma de acceder a las propiedades de un tipo. Por ejemplo:
type Point = {
x: number;
y: number;
};
type X = Point["x"];
// X es number
interface Car {
make: string;
model: string;
year: number;
color: {
red: string;
green: string;
blue: string;
}
}
type CarMake = Car["make"]; // string
let car : Car["color"]: // Esta esperando un objeto con las propiedades red, green y blue
let carProperty : Car["color" | "year"]; // object | numbertype Point = {
x: number;
y: number;
};
type X = Point["x"];
// X es number
interface Car {
make: string;
model: string;
year: number;
color: {
red: string;
green: string;
blue: string;
}
}
type CarMake = Car["make"]; // string
let car : Car["color"]: // Esta esperando un objeto con las propiedades red, green y blue
let carProperty : Car["color" | "year"]; // object | numberPatrón de modulo
Patrón de modulo es un patrón de diseño que nos permite superponer tipos de manera efectiva a elementos ya exportados por un módulo.