Машинопись: Частичная <MyType>с дополнительными свойствами для необязательных - PullRequest
0 голосов
/ 19 марта 2020

Можно ли в машинописи разрешить методу принимать Partial<Something> таким образом, чтобы все подвойства Something тоже были необязательными?

export interface ISomething {
    user: IUser;
}
export interface IUser {
    id: number;
    name: string;
}

export const myMethod = (something: Partial<ISomething>): void => {};

myMethod({ user: { id: 1, name: "" } });   //this works

myMethod({ user: { id: 1 } });             //this doesn't (but I want this to work too)

большое спасибо; )

1 Ответ

2 голосов
/ 19 марта 2020

Вы, по сути, ищете какой-то тип глубокого частичного сопоставления, например,

 type DeepOptional<T> = T extends object
    ? DeepOptionalObject<T>
    : T | undefined

type DeepOptionalObject<T> = { [P in keyof T]?: DeepOptional<T[P]> }

type Foo = { bar: Bar }
type Bar = { a: number, b: boolean[] }

const f1: Partial<Foo> = { bar: { a: 1 } } // NOPE
const f2: DeepOptional<Foo> = { bar: {a: 1 } } // OK

Ссылка для игровой площадки

...