javascript - TS1128 'Očekivana deklaracija ili izjava' pogreška na kraju datoteke koja ne nestaje iako kod izgleda ispravno


Ovo je točno isto pitanje postavljeno u TS1128: Očekuje se deklaracija ili izjava (kraj datoteke), ali to pitanje nikada nije dobilo odgovor.

Pišem NodeJS/JavaScript/Keystone projekt. Moj WebStorm IDE pokazuje da imam pogrešku u mom kodu (ovo je na kraju datoteke):

Pokušao sam postupno komentirati/uklanjati jedan dio koda u isto vrijeme, sve dok mi ne ostane ništa. Samo ako uklonim sav kod, greška nestaje.

Nemam pojma odakle dolazi pogreška. Svi zagrade/oklapači se čine podudarnima. Također ne znam je li ovo pogreška u TypeScriptu, pogreška u ESLintu ili nešto drugo.

Kod se kompajlira, ali projekt više ne funkcionira ispravno, i pitam se znači li to što se pojavljuje pogreška na neki temeljni problem zbog kojeg projekt ne uspijeva.

Kod za ovu datoteku je:

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'
        })
    ]
};

Moj .eslintrc datoteka je

{
  "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
  }
}

i moja datoteka tsconfig.json je

{
  "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"
  ]
}

Odgovor #1

Kao što je @Cerulean naveo, činilo se da postoji problem s datotekom za mene. Imao sam točno

Kreirao sam novu datoteku, zalijepio kod u nju kao običan tekst i spremio datoteku. Nema problema s ESLintom. Dakle, obrisao sam staru datoteku i ovu novu datoteku preimenovao u naziv stare datoteke. Radi besprijekorno, bez grešaka.