Строка 0: ошибка синтаксического анализа: невозможно прочитать карту свойства undefined. - PullRequest
8 голосов
/ 29 мая 2020

В настоящее время запускаю сервер на моей стороне клиента, я получаю указанную выше ошибку. Я использую Typescript, React, ESlint. Я не могу перебросить go вперед, так как эта ошибка меня преследует. Страница github для Eslint тоже не сильно помогла.

Эта ошибка возникла после того, как я создал компонент useMutation и экспортировал его в index.ts. Не знаю, как избавиться от этой ошибки.

Below is my package.json
    {
    "name": "tinyhouse_client",
    "version": "0.1.0",
    "private": true,
      "dependencies": {
      "@testing-library/jest-dom": "^4.2.4",
      "@testing-library/react": "^9.3.2",
      "@testing-library/user-event": "^7.1.2",
      "@types/jest": "^24.0.0",
      "@types/node": "^12.0.0",
      "@types/react": "^16.9.35",
      "@types/react-dom": "^16.9.0",
      "@typescript-eslint/parser": "^3.0.2",
      "react": "^16.13.1",
      "react-dom": "^16.13.1",
      "react-scripts": "3.4.1",
      "typescript": "~2.23.0"
      },
      "resolutions": {
     "@typescript-eslint/eslint-plugin": "^2.23.0",
     "@typescript-eslint/parser": "^2.23.0",
     "@typescript-eslint/typescript-estree": "^2.23.0"
     },
     "scripts": {
     "start": "react-scripts start",
     " build": "react-scripts build",
     "test": "react-scripts test",
     "eject": "react-scripts eject"
     },
     "eslintConfig": {
     "extends": "react-app"
     },
     "browserslist": {
     "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
      "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
     ]
     },
     **strong text** "proxy": "http://localhost:9000"
      }
Below is my index.ts
    export * from './server';
    export * from './useQuery';
    export * from './useMutation';
And my useMutation.ts
    import { useState } from 'react';
    import { server } from './server';

    interface State<TData> {
    data: TData | null;
    loading: boolean; 
    error: boolean;
    }

    type MutationTuple<TData, TVariables> = [
    (variables?: TVariables | undefined) => Promise<void>,
    State<TData>
    ];

    export const useMutation = <TData = any, TVariables = any>(
    query: string
    ): MutationTuple<TData, TVariables> => { 
    const [state, setState] = useState<State<TData>>({
    data: null,
    loading: false,
    error: false,
    })

    const fetch = async (variables?: TVariables) => {
    try {
      setState({ data: null, loading: true, error: false });

      const { data, errors } = await server.fetch<TData, TVariables>({ query, variables });
      if (errors && errors.length) {
        throw new Error(errors[0].message);
      }

      setState({ data, loading: false, error: false });
    } catch (err) {
      setState({ data: null, loading: false, error: true });
      throw console.error(err);
    }
   }

   return [fetch, state];
};

Ответы [ 4 ]

7 голосов
/ 30 августа 2020

Для будущих гуглеров:

Только что у меня была такая же проблема на TypeScript 4.0.2 в проекте Vue. js 2. Я исправил это, обновив @typescript-eslint/eslint-plugin и @typescript-eslint/parser до последней версии, которую npm дал бы мне, используя @latest, которое в то время было 3.3.0 и 3.10.1 соответственно.

3 голосов
/ 29 мая 2020

Это исходит из eslint-typescript? Если да, убедитесь, что ваша версия машинописного текста не является разработкой / ночной сборкой.

2 голосов
/ 03 сентября 2020

Это то, что сработало для моего проекта CRA.

Шаг 1: отредактируйте package.json и установите typescript версию на ^3.9.7

Шаг 2: удалите папку .cache в node_modules

Шаг 3: запустить npm install

2 голосов
/ 30 августа 2020

Попробуйте поиграть с типами переменных внутри интерфейсов. Например, у меня возникла эта ошибка, когда у меня был такой интерфейс состояния:

interface State{
    foo: []
}

, но когда я изменил тип массива, он работал:

interface State{
    foo: string[]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...