Если у меня есть частичный тип для конструктора. Как мне затем ввести его по завершении?

#typescript

#typescript

Вопрос:

Как мне использовать типы, когда я хочу построить объект?

НАПРИМЕР. Если у меня есть:

 interface Foo {
  a: string;
  b: string;
  c: string;
  d: string;
}

interface Bar extends Partial<Foo>{}

const foo: Foo = useMemo(() => {
  const bar: Bar = {}
  bar.a = 'a';
  bar.b = 'b';
  bar.c = 'c';
  return bar;
,[])
  

только это приводит к ошибке типа:

 Type 'Partial<Foo>' is not assignable to type 'Foo'.
  Types of property 'a' are incompatible.
    Type 'string | undefined' is not assignable to type 'string'.
      Type 'undefined' is not a
  

Комментарии:

1. это ожидаемо, не так ли? но вы не можете просто использовать утверждение типа? const bar: Foo = {} as Foo ?

2. @Estradiaz Я новичок в Typescript. Очевидно, я слишком много думаю об этом!

3. Есть ли причина для создания объекта таким образом? (против выполнения const bar = { a: 'a' ... } )

4. @AlekseyL. Я просто упрощаю пример, в реальном примере есть несколько сложных вычислений

5. Затем const bar = {} as Foo и отбросьте частичный.. Или лучше извлекать сложные части в функции и создавать объект за один раз

Ответ №1:

Если свойства сложны для создания, я бы рекомендовал сначала сохранить их в локальных файлах, а затем напрямую возвращать правильный тип:

 interface Foo {
  a: string;
  b: string;
  c: string;
  d: string;
}

const foo: Foo = useMemo(() => {
  const a = 'a';
  const b = 'b';
  const c = 'c';
  const d = 'd';

  return { a, b, c, d };
},[])