TypeScript's Omit, explained
It will remove fields from a given object type. It's useful in making subsets of an object type.
The TypeScript helper called Omit
is really useful! It will remove fields from a given object type. It’s useful in making subsets of an object type.
example.ts
interface Book {
author: string;
isbn: string;
title: string;
}
type SimpleBook = Omit<Book, 'author'>;
// => { isbn: string; title: string; };
Omit
removes the author field, leaving only isbn and title.🤔 What if we want to omit more fields? — Omit
can take away more fields by joining many fields with a union type. Here it is removing two fields.
example.ts
interface Book {
author: string;
isbn: string;
title: string;
}
type IsbnOnlyBook = Omit<Book, 'author' | 'title'>;
// => { isbn: string; };
‘author’ | ‘title’
allows omitting two different fields from the interface.🤔 What if we want to reuse Omit
on many things, not just books? — We can use a generic type that we can reuse on types other than Book
. How about with a Tweet
, for example:
example.ts
interface Book {
author: string;
isbn: string;
title: string;
}
interface Tweet {
author: string;
body: string;
}
type NoAuthor<T> = Omit<T, 'author'>;
type AnonymousBook = NoAuthor<Book>;
// => { isbn: string; title: string; }
type AnonymousTweet = NoAuthor<Tweet>;
// => { body: string; }
The opposite of Omit is Pick
, which removes all fields except the ones you want.
example.ts
interface Book {
author: string;
isbn: string;
title: string;
}
type AuthorOnly = Pick<Book, 'author'>
// => { author: string; }
type WithoutAuthor = Omit<Book, 'author'>
// => { isbn: string; title: string; }
type TitleAndAuthorOnly = Pick<Book, 'title' | 'author'>
// => { title: string; author: string; }