Typescript: Ekskludere alle påkrevde egenskaper fra en type


Hvordan må jeg definere i følgende kode type ExcludeAllRequiredProps<T> for å ekskludere (som navnet sier) alle nødvendige egenskaper? Takk på forhånd.

type A = {
  a: number,
  b: number,
  c?: number,
  d?: number
}

type B = ExcludeAllRequiredProps<A>


// B shall be { c?: number, d?: number }

[Rediger - en stund senere]

Anser du dette som en riktig løsning?

type ExcludeAllRequiredProps<T> = {
  [K in keyof T]?: T extends Record<K, T[K]> ? never : T[K]
}

Svar #1

Løsningen din er nær, men den beholder de ekstra nøklene, noe som kan forårsake forvirring selv om de er av typen never. Denne løsningen vil fjerne de uønskede nøklene fra resultatet:

type ExcludeAllRequiredProps<T> = Pick<T, {
    [K in keyof T]-?: T extends Record<K, T[K]> ? never : K
}[keyof T]>

type A = {
    a: number,
    b: number,
    c?: number,
    d?: number
}

type B = ExcludeAllRequiredProps<A> // { c?: number, d?: number }

Relaterte artikler