Как использовать интерфейс для пустого объекта, который заполняется на более позднем этапе - PullRequest
0 голосов
/ 18 апреля 2020

Я не совсем уверен, как это описать.

Но я хочу определить пустой объект, который я хочу заполнить данными. Теперь я заранее знаю, что я хочу, чтобы объект в конечном итоге выглядел следующим образом:

interface BodyInterface {
  name: string;
  lastName: string;
}

Некоторые данные поступают из формы отправки, которая выглядит следующим образом:

// data is formdata which looks like:
// name: "foo"
// lastName: "bar"

Теперь добавим это в объект, который я хочу использовать позже:

const body = {}; // <- how do I use the BodyInterface on this body

someArray.forEach(({ name, value }) => {
  body[name] = data.get(name).value as string;
});

Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 18 апреля 2020

Рохан Агарвал будет работать, но важно отметить, что Typescript больше не будет предупреждать вас о пропущенных свойствах.

Версия этого варианта - использовать Partial.

const body:BodyInterface  = Partial<BodyInterface>;

Это похоже typcript проверит все свойства, а также не предупредит вас о пропущенных, но теперь у вас есть тип, который фактически представляет эти знания.

Хотя преобразовать это в неполную версию BodyInterface нелегко.

В моем пре-машинописном и раннем машинописном коде я также часто постепенно создавал объекты, прежде чем возвращать их из своих функций. Я обнаружил, что если я хочу работать с машинописью и получить наибольшее значение, лучше вообще отказаться от этой практики. Вместо этого создайте свои индивидуальные свойства в переменных, и в качестве самого последнего шага постройте весь BodyInterface сразу.

Это требует изменения привычек, но вы получите наибольшую отдачу от того, что Typescript может сделать для вы.

0 голосов
/ 18 апреля 2020

Этого можно достичь, используя:

const body:BodyInterface  = {} as BodyInterface;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...