Skip to content

Instantly share code, notes, and snippets.

@s3i7h
Last active May 12, 2024 09:15
Show Gist options
  • Save s3i7h/94d760228e295c603ce807187485d633 to your computer and use it in GitHub Desktop.
Save s3i7h/94d760228e295c603ce807187485d633 to your computer and use it in GitHub Desktop.
omitType, omitNull typescript example
type OmitNull<T> = T extends never ? never :
T extends null ? never :
T extends Array<infer U> ? Array<OmitNull<U>> :
T extends { [key: string]: unknown } ? { [K in keyof T]: OmitNull<T[K]> } :
T
type A = {
a: number
b: string | null
c: {
d: Array<null>
}
}
type B = OmitNull<A>
type A = {
a: string
b?: string
}
const a: A = {
a: "abc",
b: "def",
}
const b: { a: string } = a
type OmitOptional<T> = unknown extends T ? unknown :
T extends undefined ? unknown :
T extends { [key: string]: unknown } ? {
[K in { [L in keyof T]: unknown extends OmitOptional<T[L]> ? never : L }[keyof T]]: T[K]
} :
T
type B = OmitOptional<A>
const c: B = b
type A = {
a: string
b?: string
}
const a: A = {
a: "abc",
b: "def",
}
const b: { a: string } = a
type OmitOptional<T> = unknown extends T ? unknown :
T extends undefined ? unknown :
T extends { [key: string]: unknown } ? {
[K in { [L in keyof T]: unknown extends OmitOptional<T[L]> ? never : L }[keyof T]]: OmitOptional<T[K]>
} :
T
type B = OmitOptional<A>
const c: B = b
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment