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
keyofused forOmitandExclude - 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
Omitis 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)