TS1128:预期的声明或语句(文件结尾)

Mis*_*olf 18 typescript reactjs

我正在做一个 TypeScript/React 项目(只是习惯了,一年没写 React 等等),遇到了一个问题。

当我编写这个组件时,我遵循了我发现的一些文档,但是我在这个文件的末尾收到了一个 TS1128 (Declaration or statement expected) 错误,我不知道为什么:

import * as React from 'react';
import Count from './CountDisplay';

interface State {
    count: number;
}

class Counter extends React.Component<{}, State> {

    state: State = {count: 0};

    increment() {
        this.setState({
            count: (this.state.count + 1)
        });
    }

    decrement() {
        this.setState({
            count: (this.state.count - 1)
        });
    }

    render(): JSX.Element {
        return (
            <div>
                <Count count={this.state.count}/>
                <button onClick={this.increment}>Increment</button>
                <button onClick={this.decrement}>Decrement</button>
            </div>
        );
    }
}

export default Counter;
Run Code Online (Sandbox Code Playgroud)

我不知道,为什么我一直收到错误消息,因为代码看起来不错(或者我认为),但我可能是错的。

下面是我的 TSConfig.json,因为我认为它可能与问题有关:

{
  "compilerOptions": {
    "outDir": "./dist",
    "sourceMap": true,
    "noImplicitAny": true,
    "module": "commonjs",
    "target": "es6",
    "jsx": "react"
  }
}
Run Code Online (Sandbox Code Playgroud)

Mom*_*kov 36

2020 年 5 月 11 日更新:

关闭并重新打开文件也可以修复它。IntelliJ TypeScript 解析似乎不同步。

原答案

我参加聚会可能有点晚了,但我也经历过这种情况,为我解决问题的是以下步骤。

  1. 创建一个新文件。
  2. 将旧文件的内容复制到新文件中。
  3. 删除旧文件。
  4. 重命名新文件以匹配旧文件的名称。

现在我不确定为什么会解决这个问题,但我有一些猜测。我正在使用 IntelliJ,这是我假设你也在使用什么,因为我在其他地方从未遇到过这个问题,即使存在问题,TS 编译也很好。这更像是一种编辑器错误的交易(至少对我而言)。重新打开编辑器也可以解决这个问题。

希望这一切都有帮助!

猜一猜

与行尾有关。当您根据操作系统执行常见的 git 操作时,Git 会更改您的行尾,因为 Windows 和 Linux 具有不同的行尾序列。这可能会绊倒 IntelliJ。我曾经在一个项目上从 master 拉出来后遇到这个问题,所以给了我这个印象。


猜2

您在代码中的某处插入了一个“不可见”的 unicode 字符。由于自定义 MacOS 键盘布局,这发生在我身上几次。我的两种预感都与“隐形”角色有关,但恐怕这就是我的专业知识结束的地方。也许有更多专业知识的人可以加入进来。


Mic*_*sky 5

当我在 WebStorm 2019.3.1 中遇到此问题时,我可以通过转到“文件”>“无效缓存/重新启动...”并按“无效并重新启动”按钮来解决该问题。当 WebStorm 重新启动时,错误消失了。