Introduction
A note to self lest I forget the resources I learned from.
As I was going thru Swyx's React TypeScript Cheatsheet, Props: Omit prop from a type, I had trouble understand the definition of Omit
.
// this comes inbuilt with TS 3.5
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>
Could not wrap my heads around it so Googled and found Marius Schulz's blog posts.
Blog read order
I read these backwards initially but the posts in following order seems to make sense.
-
keyof and Lookup Types in TypeScript - Learn about
keyof
used forOmit
andExclude
-
Conditional Types in TypeScript - To understand
Exclude
type Exclude<T, U> = T extends U ? never : T
-
The Omit Helper Type in TypeScript - To finally learn how
Omit
is implemented
References
Advaned utlity type document and sources for
Omit<Type, Keys>
- Definition: Constructs a type by picking all properties from Type and then removing Keys.
- Documentation: https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys
- Source: https://github.com/microsoft/TypeScript/blob/master/lib/lib.es5.d.ts#L1504
/**
* Construct a type with the properties of T except for those in type K.
*/
type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>
Pick<Type, Keys>
- Definition: Constructs a type by picking the set of properties Keys from Type.
- Documentation: https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys
- Source: https://github.com/microsoft/TypeScript/blob/master/lib/lib.es5.d.ts#L1480
/**
* From T, pick a set of properties whose keys are in the union K
*/
type Pick<T, K extends keyof T> = {
[P in K]: T[P]
}
Exclude<Type, ExcludedUnion>
- Definition: Constructs a type by excluding from Type all union members that are assignable to ExcludedUnion.
- Documentation: https://www.typescriptlang.org/docs/handbook/utility-types.html#excludetype-excludedunion
- Source: https://github.com/microsoft/TypeScript/blob/master/lib/lib.es5.d.ts#L1494
/**
* Exclude from T those types that are assignable to U
*/
type Exclude<T, U> = T extends U ? never : T
Misc. Link
Need to watch Marius Schulz's Egghead course, Advanced Static Types in TypeScript.
Image by Edward Lich from Pixabay
cuz, Donut's hole reminds me of Omit 😉
Top comments (0)