TypeScript: глубокий частичный? - PullRequest
0 голосов
/ 10 апреля 2020

Есть ли способ указать частичный тип в TypeScript, который также делает все дочерние объекты частичными? Например:

interface Foobar {
  foo: number;
  bar: {
    baz: boolean;
    qux: string;
  };
}

const foobar: Partial<Foobar> = {
  foo: 1,
  bar: { baz: true }
};

Выдает следующую ошибку:

TS2741: Property 'qux' is missing in type '{ baz: true; }' but required in type '{ baz: boolean; qux: string; }'.

Есть ли способ сделать дочерние узлы частичными, а также

1 Ответ

1 голос
/ 10 апреля 2020

Вы можете просто создать новый тип, скажем, DeepPartial, который в основном ссылается на себя:

type DeepPartial<T> = {
    [P in keyof T]?: DeepPartial<T[P]>;
};

Затем вы можете использовать его следующим образом:

const foobar: DeepPartial<Foobar> = {
  foo: 1,
  bar: { baz: true }
};

См. Пример проверки концепции на TypeScript Playground .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...