TypeScript provee una serie de utilidades para facilitar transformaciones entre tipos. Estas utilidades se encuentran de forma global.
Partial<Type>
Construye un tipo con todas las propiedades de Type
como opcionales. Esta utilidad retorna un tipo que representa todos los subelementos del tipo provisto.
interface Tarea {
titulo: string
descripcion: string
}
function actualizarTodo(tarea: Tarea, camposActualizar: Partial<Tarea>) {
return { ...tarea, ...camposActualizar }
}
const tarea1: Tarea = {
titulo: 'Organizar escritorio',
descripcion: 'Limpiar, ordenar y destruir material vencido',
}
const tarea2 = actualizarTodo(tarea1, {
descripcion: 'Tirar la basura',
})
Required<Type>
Construye un tipo en el cual existen todas las propiedades de Type
en donde los elementos que la componen son todos requeridos. Es decir lo opuesto a Partial<Type>
.
interface Props {
a?: number
b?: string
}
const obj: Props = { a: 5 }
const obj1: Required<Props> = { a: 100 }
Readonly<Type>
Construye un tipo con todas las propiedades de Type
definidas como readonly
, lo que quiere decir que las propiedades del nuevo tipo no pueden ser reasignadas.
interface Tarea {
titulo: string
}
const tarea: Readonly<Tarea> = {
titulo: 'Eliminar usuarios inactivos',
}
tarea.titulo = 'Hola!' // <- esta l铆nea generar谩 un error
Record<Keys,Type>
Construye un objeto cuyas propiedades son Keys
(llaves) y cuyos valores son Type
. Esta utilidad puede ser utilizada para mapear propiedades de un tipo a otro.
interface GatoInfo {
edad: number
color: string
}
type GatoNombre = 'bolita' | 'michi' | 'rayas'
const gatos: Record<GatoNombre, GatoInfo> = {
bolita: { edad: 10, color: 'Rojo' },
michi: { edad: 15, color: 'Negro' },
rayas: { edad: 21, color: 'Amarilla' },
}
Pick<Type, Keys>
Construye un tipo eligiendo un grupo de propiedades a partir de Type
.
interface Tarea {
titulo: string
descripcion: string
completado: boolean
}
type TareaReducido = Pick<Tarea, 'titulo' | 'descripcion'>
const tarea: TareaReducido = {
titulo: 'Limpiar Recamara',
descripcion: 'Poner en orden todo lo que existe en la recamara',
}
Omit<Type, Keys>
Construye un tipo tomando las propiedades de Type
removiendo las Keys
especificadas.
interface Tarea {
titulo: string
descripcion: string
completado: boolean
}
type TareaPreview = Omit<Tarea, 'titulo'>
const tarea: TareaPreview = {
completado: true,
descripcion: 'Aqui la descripci贸n de la tarea',
titulo: 'Este es el t铆tulo', // <- esta l铆nea generar谩 un error
}
Exclude<Type,UnionDeExcluidos>
Construye un tipo excluyendo de Type
el resultado de la uni贸n.
type T0 = Exclude<'a' | 'b' | 'c', 'c'>
// type T0 = "a" | "b"
Extract<Type,Union>
Construye un tipo extrayendo de Type
basado en el resultado de la uni贸n.
type T0 = Extract<'a' | 'b' | 'c', 'a' | 'c'>
// type T0 = "a" | "c"
NonNullable
Construye un tipo excluyendo null
y undefined
de Type
.
type T0 = NonNullable<string | number | undefined | null>
// type T0 = string | number
Parameters<Type>
Construye una tupla de tipos a partir de los tipos utilizados en los par谩metros de una funci贸n de tipo Type
.
declare function f1(arg: { a: number; b: string }): void
type T0 = Parameters<() => string>
// type T0 = []
type T1 = Parameters<(s: string) => void>
// type T1 = [s: string]
type T2 = Parameters<<T>(arg: T) => T>
// type T2 = [arg: unknown]
type T3 = Parameters<typeof f1>
// type T3 = [arg: { a: number; b: string; }]
type T4 = Parameters<any>
// type T4 = unknown[]
type T5 = Parameters<never>
// type T5 = never
type T6 = Parameters<string>
// type T6 = never
type T7 = Parameters<Function>
// type T7 = never
ConstructorParameters<Type>
Construye una tupla o arreglo de tipos a partir de los tipos provistos a la funci贸n del constructor.
type T0 = ConstructorParameters<ErrorConstructor>
// type T0 = [message?: string]
type T1 = ConstructorParameters<FunctionConstructor>
// type T1 = string[]
type T2 = ConstructorParameters<RegExpConstructor>
// type T2 = [pattern: string | RegExp, flags?: string]
type T3 = ConstructorParameters<any>
// type T3 = unknown[]
type T4 = ConstructorParameters<Function> // <- error
// Type 'Function' does not satisfy the constraint 'new (...args: any) => any'.
ReturnType<Type>
Construye un tipo en base al Type
del valor de retorno de una funci贸n.
declare function f1(): { a: number; b: string }
type T0 = ReturnType<() => string>
// type T0 = string
type T1 = ReturnType<() => void>
// type T1 = void
InstanceType<Type>
Construye un tipo a partir del tipo de instancia de la funci贸n constructor en Type
.
type T0 = InstanceType<typeof C>
// type T0 = C
type T1 = InstanceType<any>
// type T1 = any
type T2 = InstanceType<never>
// type T2 = never
ThisParameterType<Type>
Extrae el tipo del par谩metro this
del tipo de una funci贸n, o unknown
si la funci贸n no tiene un par谩metro this
.
function toHex(this: number) {
return this.toString(16)
}
function numeroToString(n: ThisParameterType<typeof toHex>) {
return toHex.apply(n)
}
Intrinsic Manypulation Types (Manipuladores Intr铆nsecos)
Uppercase<Type>
Lowercase<Type>
Capitalize<Type>
Uncapitalize<Type>