typescript hvordan man transformerer en udefinert egenskap til en valgfri egenskap


Jeg har kode som

interface Test {
  prop: number | undefined
}

og jeg vil gjøre den udefinerte egenskapen om til en valgfri egenskap, for eksempel

type ToOptional = ???
ToOptional<Test>
/** transform result
{
  prop?: number
}
*/

Hvordan bør jeg definere ToOptional?

REDIGER :

interface Test {
  prop1: number | undefined;
  prop2: number;
}

type ToOptional = ???
ToOptional<Test>
/** transform result
{
  prop1?: number
  prop2: number
}
*/

Svar #1

Du kan bruke kartlagte typer og betingede typer for å hente ut egenskapene som har undefined i seg, og deretter velge undefined-egenskapene fra typen. På samme måte må vi velge egenskapene som ikke er undefined for å få tilbake alle de opprinnelige egenskapene

interface Test {
    prop: number | undefined
    prop2: number
    prop3?: number
}

type UndefinedProperties<T> = {
    [P in keyof T]-?: undefined extends T[P] ? P : never
}[keyof T]

type ToOptional<T> = Partial<Pick<T, UndefinedProperties<T>>> & Pick<T, Exclude<keyof T, UndefinedProperties<T>>>

type t = ToOptional<Test>

Relaterte artikler