Dodanie nowej właściwości do obiektu przy użyciu spread operatora

0

Czy istnieje jakaś możliwość aby dodać przy pomocy spread operatora nową wartość do obiektu? W taki sposób jak poniżej nie działa, bo jest niezgodność typów.

let data = {
    first: 1,
    second: 2,
    third: 3,
  };

  data = { ...data, fourth: 4 };

Chciałbym przypisać nowy obiekt też do zmiennej data

2

TS error jak najbardziej zasadny, ponieważ nie zawsze musisz manualnie typować dane, by TS wiedział, jakich danych ma się spodziewać. Zobacz na taki przypadek "const num = 1". Tutaj również TS doskonale wie, że zmienna num przechowuje jakąś daną o typie number, bo w zasadzie sam to określiłem poprzez przypisanie wartości o typie number do zmiennej.

Dokładnie to samo dzieje się w Twoim przypadku. Czyli TS sam interpretuje, że w obiekcie, który przechowuje zmienna obj, ma spodziewać się dokładnie takich danych, jakie zadeklarowałeś i żadnych innych, więc przy próbie przypisania nieoczekiwanej danej (fourth), rzuca errorem.

Posłużenie się interfejsem rozwiąże Twój problem:

interface Obj {
  first: number;
  second: number;
  third: number;
  fourth?: number;
}

let obj: Obj = {
  first: 1,
  second: 2,
  third: 3,
};

obj = { ...obj, fourth: 4 };

1 użytkowników online, w tym zalogowanych: 0, gości: 1