Как уничтожить объект, который может быть пустым - PullRequest
1 голос
/ 05 февраля 2020

У меня есть интерфейс

interface Foo {
  name: string
  subject: string
  body: string
}

И функция, которая принимает Foo | {}, где я деструктурирую свойства и что-то с ними делаю, если они не пустые

const doStuff = ({body, subject, name}: Foo | {}) => {
  const errors = [
    body?.trim() && `body`,
    subject?.trim() && `subject`,
    name?.trim() && `name`,
  ].filter(x => x);
  setErrors(errors)
  ...
}

деструктуризация не компилируется, потому что ... это может быть объект без этих свойств. Как же я могу сказать машинописи, что это круто, и я хочу, чтобы в этом случае эти свойства были undefined, не прибегая к @ts-ignore или any?

1 Ответ

1 голос
/ 05 февраля 2020

Вместо использования типа Foo | {} используйте Partial<Foo>. Partial<T> делает все члены необязательными, что фактически является тем, что вы пытаетесь сделать.

const doStuff = ({ body, subject, name }: Partial<Foo>) => {
  ...
};
...