TS1128 «Ожидается объявление или утверждение» - ошибка в конце файла, которая не исчезнет, ​​даже если код выглядит нормально

Это точно такой же вопрос, который задан в TS1128: Ожидается объявление или утверждение (конец файла), но на этот вопрос так и не получил ответа.

Я пишу проект NodeJS / JavaScript / Keystone. Моя IDE WebStorm указывает на ошибку в моем коде (это в конце файла):

введите описание изображения здесь

Я пытался последовательно комментировать / удалять по одному разделу кода за раз, пока ничего не осталось. Ошибка исчезнет, ​​только если я удалю весь код.

Понятия не имею, откуда взялась ошибка. Кажется, что все скобки / круглые скобки совпадают. Я также не знаю, ошибка ли это TypeScript, ошибка ESLint или что-то еще.

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

Код этого файла:

import { Keystone } from '@keystonejs/keystone';
import { GraphQLApp } from '@keystonejs/app-graphql';
import { AdminUIApp } from '@keystonejs/app-admin-ui';
import { StaticApp } from '@keystonejs/app-static';
import { LocalFileAdapter } from '@keystonejs/file-adapters';
import { IframelyOEmbedAdapter } from '@keystonejs/oembed-adapters';
import { MongooseAdapter } from '@keystonejs/adapter-mongoose';
import { KnexAdapter } from '@keystonejs/adapter-knex';
import { PasswordAuthStrategy } from '@keystonejs/auth-password';

import lists from './lists';
import checkArticlePublishDates from './jobs/checkArticlePublishDates';

import log from './util/log';
import seedDb from './util/seedDb';

require('dotenv').config();

let authStrategy;

const PROJECT_NAME = process.env.PROJECT_NAME;

const iframelyAdapter = new IframelyOEmbedAdapter({
    apiKey: process.env.IFRAMELY_KEY
});

const staticPath = 'public';
const staticRoute = '';
const imageFileAdapter = new LocalFileAdapter({
    src: `${staticPath}/images`,
    path: `${staticRoute}/images`
});

const keystone = new Keystone({
    name: PROJECT_NAME,
    adapter: new MongooseAdapter()
});
const createAuth = () => {
    authStrategy = keystone.createAuthStrategy({
        type: PasswordAuthStrategy,
        list: 'User',
        config: {
            identityField: 'username', // default: 'email'
            secretField: 'password' // default: 'password'
        }
    });
};

const createLists = () => lists(keystone, { imageFileAdapter, iframelyAdapter });

const setupCronJobs = async () => {
    const checkPub = await checkArticlePublishDates(keystone);
};

const boot = async () => {
    createLists();
    createAuth();

    await keystone.prepare({
        cors: { origin: true, credentials: true }
    });

    await setupCronJobs();
};

boot();
export default {
    keystone,
    apps: [
        new GraphQLApp(),
        new AdminUIApp({
            adminPath: '/admin',
            hooks: require.resolve('./admin/'),
            authStrategy,
            enableDefaultRoute: true
        }),
        new StaticApp({
            path: '/',
            src: 'public',
            fallback: 'index.html'
        })
    ]
};

Мой .eslintrc файл

{
  "parser": "babel-eslint",
  "parserOptions": {
    "ecmaVersion": 2020,
    "sourceType": "module",
    "ecmaFeatures": {
      "jsx": true,
      "modules": true
    }
  },
  "extends": [
    "eslint:recommended",
    "prettier",
    "plugin:react/recommended",
 ],
  "plugins": [
    "prettier",
    "react",
    "react-hooks"
  ],
  "env": {
    "es6": true,
    "node": true,
    "mocha": true,
    "browser": true
  },
  "rules": {
    "react-hooks/rules-of-hooks": "error",
    "react-hooks/exhaustive-deps": "warn",
    "react/prop-types": 1,
    "react/jsx-uses-react": "error",
    "react/jsx-uses-vars": "error",
    "react/no-unescaped-entities": "warn",
    "react/no-find-dom-node": 0,
        "comma-dangle": ["error", "never"],
    "global-require": 0
  }
}

а мой tsconfig.json файл

{
  "compilerOptions": {
    "target": "ES6",
    "lib": [
      "esnext",
      "dom"
    ],
    "skipLibCheck": true,
    "outDir": "tsout",
    "strict": false,
    "forceConsistentCasingInFileNames": true,
    "esModuleInterop": true,
    "module": "commonjs",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "sourceMap": true,
    "alwaysStrict": true,
    "jsx": "react"
  },
  "exclude": [
    "node_modules"
  ]
}

person Cerulean    schedule 04.04.2020    source источник
comment
Я скопировал содержимое этого файла в новый файл, и проблема была решена. Но я не понимаю, что происходит. Перед этим я очистил кеш WebStorm, но это не помогло.   -  person Cerulean    schedule 04.04.2020
comment
Об ошибке сообщает Typescript, поскольку сообщение начинается с `TS1128: ...`. Хотя код выглядит нормально.   -  person golopot    schedule 19.04.2020


Ответы (1)


Как заявил @Cerulean, у меня возникла проблема с самим файлом. У меня была в точности проблема, описанная выше, и я тоже использовал WebStorm.

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

person Tony Archer    schedule 11.11.2020