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>
