Обновление до машинописного текста 3.8, теперь массив доступен только для чтения - PullRequest
1 голос
/ 28 мая 2020

Недавно я обновил свой проект с Typescript 3.5 до 3.8. Все работает без сбоев, ожидается некоторая операция с массивом.

    const usedROI = this.rois.find((roi) => roi.id === roiId);
    usedROI.position.height = position.height;

ERROR TypeError: Невозможно назначить только для чтения свойство 'height' объекта '[object Object]'

   let rerouteWaypoint = route.waypoints.filter((wp) => wp.type === IWaypointType.REROUTE_POINT);
   rerouteWaypoint.forEach((wp) => (wp.type = IWaypointType.USER_POINT));

ERROR TypeError: невозможно назначить только для чтения свойство 'type' объекта '[object Array]'

  const wps = state.entities[action.payload.routeId].waypoints;
  const wp = {
    ...wps[index],
    ...action.payload.changes,
  };
  wps[index] = { ...wp }; <= this line breaks

core. js: 4117 ERROR TypeError : Невозможно назначить только для чтения свойство '0' объекта '[object Array]'

Я нигде в своем приложении не использую только чтение, похоже, весь мой массив заморожен и не редактируется.

Почему так? Я не вижу этого в критических изменениях. Есть ли способ найти в визуальном коде ВСЕ место, где возникает эта проблема? Потому что прямо сейчас появляется только ошибка во время выполнения, и развертывать такую ​​версию действительно небезопасно.

EDIT: Кто-то говорит о подобной проблеме здесь => Ошибка при сортировке массива объектов Невозможно назначить только для чтения свойство '2' объекта '[object Array]'

, но я не понимаю, почему простой массив также выбрасывает его без использования сохраненных элементов redux.

1 Ответ

1 голос
/ 28 мая 2020

После комментария @ TJCrowder я просмотрел свой код и по умолчанию, если не набирал селектор в NGRX, возвращаемое значение НЕ вводится только для чтения.

Я просмотрел все свои селектор и набрал их соответствующим образом, например.

export const getSelectedProjectId = (state: State): Readonly<number> => state.selectedProjectId;
export const getError = (state: State): Readonly<string> => state.error;
export const getIsLoading = (state: State): Readonly<boolean> => state.isLoading;

export const selectAll: (state: object) => ReadonlyArray<IProject> = featureAdapter.getSelectors(selectProjectState).selectAll;
export const selectAllEntities: (state: object) => Dictionary<IProject> = featureAdapter.getSelectors(
  selectProjectState
).selectEntities;

Это вызвало ВСЕ ошибки в машинописном тексте повсюду, а затем я исправил их и исправил проект.

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