Utility Types Flashcards
Awaited<Type>
This type is meant to model operations like await
in async
functions, or the .then()
method on Promise
s - specifically, the way that they recursively unwrap Promises.
Example
type A = Awaited<Promise<string>>; // type A = string type B = Awaited<Promise<Promise<number>>>; // type B = number type C = Awaited<boolean | Promise<number>>; // type C = number | boolean
“Awaited<Type>
” (typescriptlang.org). Retrieved June 6, 2023.
Partial<Type>
Constructs a type with all properties of Type set to optional. This utility will return a type that represents all subsets of a given type.
Example:
interface Todo { title: string; description: string; } function updateTodo(todo: Todo, fieldsToUpdate: Partial<Todo>) { return { ...todo, ...fieldsToUpdate }; } const todo1 = { title: "organize desk", description: "clear clutter", }; const todo2 = updateTodo(todo1, { description: "throw out trash", });
“Partial<Type>
” (typescriptlang.org). Retrieved June 6, 2023.
Required<Type>
Constructs a type consisting of all properties of Type set to required. The opposite of Partial.
Example
interface Props { a?: number; b?: string; } const obj: Props = { a: 5 }; const obj2: Required<Props> = { a: 5 }; // Property 'b' is missing in type '{ a: number; }' but required in type 'Required<Props>'.
“Required<Type>
” (typescriptlang.org). Retrieved June 6, 2023.
Readonly<Type>
Constructs a type with all properties of Type set to readonly
, meaning the properties of the constructed type cannot be reassigned.
Example
interface Todo { title: string; } const todo: Readonly<Todo> = { title: "Delete inactive users", }; todo.title = "Hello"; // Error: Cannot assign to 'title' because it is a read-only property.
“Readonly<Type>’
” (typescriptlang.org). Retrieved June 6, 2023.
Record<Keys, Type>
Constructs an object type whose property keys are Keys
and whose property values are Type
. This utility can be used to map the properties of a type to another type.
Example
interface CatInfo { age: number; breed: string; } type CatName = "miffy" | "boris" | "mordred"; const cats: Record<CatName, CatInfo> = { miffy: { age: 10, breed: "Persian" }, boris: { age: 5, breed: "Maine Coon" }, mordred: { age: 16, breed: "British Shorthair" }, };
“Record<Keys, Type>
” (typescriptlang.org). Retrieved June 6, 2023.
Pick<Type, keys>
Constructs a type by picking the set of properties Keys
(string literal or union of string literals) from Type
.
Example
interface Todo { title: string; description: string; completed: boolean; } type TodoPreview = Pick<Todo, "title" | "completed">; const todo: TodoPreview = { title: "Clean room", completed: false, };
“Pick<Type, Keys>
” (typescriptlang.org). Retrieved June 6, 2023.
Omit<Type, Keys>
Constructs a type by picking all properties from Type
and then removing Keys
(string literal or union of string literals). The opposite of Pick
.
Example
interface Todo { title: string; description: string; completed: boolean; createdAt: number; } type TodoPreview = Omit<Todo, "description">; const todo: TodoPreview = { title: "Clean room", completed: false, createdAt: 1615544252770, }; type TodoInfo = Omit<Todo, "completed" | "createdAt">; const todoInfo: TodoInfo = { title: "Pick up kids", description: "Kindergarten closes at 5pm", };
“Omit<Type, Keys>
” (typescriptlang.org). Retrieved June 6, 2023.
Exclude<UnionType, ExcludedMembers>
Constructs a type by excluding from UnionType
all union members that are assignable to ExcludedMembers
.
Example
type T0 = Exclude<"a" | "b" | "c", "a">; // type T0 = "b" | "c" type T1 = Exclude<"a" | "b" | "c", "a" | "b">; // type T1 = "c" type T2 = Exclude<string | number | (() => void), Function>; // type T2 = string | number type Shape = | { kind: "circle"; radius: number } | { kind: "square"; x: number } | { kind: "triangle"; x: number; y: number }; type T3 = Exclude<Shape, { kind: "circle" }> /* type T3 = { kind: "square"; x: number; } | { kind: "triangle"; x: number; y: number; } */
“Exclude<UnionType, ExcludedMembers>
” (typescriptlang.org). Retrieved June 7, 2023.
Extract<Type, Union>
Constructs a type by extracting from Type
all union members that are assignable to Union
.
Example
type T0 = Extract<"a" | "b" | "c", "a" | "f">; // type T0 = "a" type T1 = Extract<string | number | (() => void), Function>; // type T1 = () => void type Shape = | { kind: "circle"; radius: number } | { kind: "square"; x: number } | { kind: "triangle"; x: number; y: number }; type T2 = Extract<Shape, { kind: "circle" }> /* type T2 = { kind: "circle"; radius: number; } */
“Extract<Type, Union>
” (typescriptlang.org). Retrieved June 7, 2023.
NonNullable<Type>
Constructs a type by excluding null
and undefined
from Type
.
Example
type T0 = NonNullable<string | number | undefined>; // type T0 = string | number type T1 = NonNullable<string[] | null | undefined>; // type T1 = string[]
“NonNullable<Type>
” (typescriptlang.org). Retrieved June 7, 2023.
Parameters<Type>
Constructs a tuple type from the types used in the parameters of a function type Type
.
Example
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>; // Error: Type 'string' does not satisfy the constraint '(...args: any) => any'. type T7 = Parameters<Function>; // Error: Type 'Function' does not satisfy the constraint '(...args: any) => any'. // Error: Type 'Function' provides no match for the signature '(...args: any): any'.
“Parameters<Type>
” (typescriptlang.org). Retrieved June 7, 2023.
ConstructorParameters<Type>
Constructs a tuple or array type from the types of a constructor function type. It produces a tuple type with all the parameter types (or the type never
if Type
is not a function).
Example
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] class C { constructor(a: number, b: string) {} } type T3 = ConstructorParameters<typeof C>; // type T3 = [a: number, b: string] type T4 = ConstructorParameters<any>; // type T4 = unknown[] type T5 = ConstructorParameters<Function>; // Error: Type 'Function' does not satisfy the constraint 'abstract new (...args: any) => any'. // Error: Type 'Function' provides no match for the signature 'new (...args: any): any'.
“ConstructorParameters<Type>
” (typescriptlang.org). Retrieved June 7, 2023.
ReturnType<Type>
Constructs a type consisting of the return type of function Type
.
Example
declare function f1(): { a: number; b: string }; type T0 = ReturnType<() => string>; // type T0 = string type T1 = ReturnType<(s: string) => void>; // type T1 = void type T2 = ReturnType<<T>() => T>; // type T2 = unknown type T3 = ReturnType<<T extends U, U extends number[]>() => T>; // type T3 = number[] type T4 = ReturnType<typeof f1>; /* type T4 = { a: number; b: string; } */ type T5 = ReturnType<any>; // type T5 = any type T6 = ReturnType<never>; // type T6 = never type T7 = ReturnType<string>; // Error" Type 'string' does not satisfy the constraint '(...args: any) => any'. type T8 = ReturnType<Function>; // Error: Type 'Function' does not satisfy the constraint '(...args: any) => any'. // Errror: Type 'Function' provides no match for the signature '(...args: any): any'.
“ReturnType<Type>
” (typescriptlang.org). Retrieved June 7, 2023.
InstanceType<Type>
Constructs a type consisting of the instance type of a constructor function in Type
.
Example
class C { x = 0; y = 0; } type T0 = InstanceType<typeof C>; // type T0 = C type T1 = InstanceType<any>; // type T1 = any type T2 = InstanceType<never>; // type T2 = never type T3 = InstanceType<string>; // Error: Type 'string' does not satisfy the constraint 'abstract new (...args: any) => any'. type T4 = InstanceType<Function>; // Error: Type 'Function' does not satisfy the constraint 'abstract new (...args: any) => any'. // Error: Type 'Function' provides no match for the signature 'new (...args: any): any'.
“InstanceType<Type>
” (typescriptlang.org). Retrieved June 9, 2023.
ThisParameterType<Type>
Extracts the type of the this
parameter for a function type, or unknown
if the function type has no this parameter.
Example:
function toHex(this: Number) { return this.toString(16); } function numberToString(n: ThisParameterType<typeof toHex>) { return toHex.apply(n); }
“ThisParameterType<Type>
” (typescriptlang.org). Retrieved June 9, 2023.