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

IT技术 reactjs typescript
2021-05-19 13:24:15

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

当我编写这个组件时,我遵循了我发现的一些文档,但是我在这个文件的末尾收到了一个 TS1128(预期的声明或语句)错误,我不知道为什么:

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;

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

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

{
  "compilerOptions": {
    "outDir": "./dist",
    "sourceMap": true,
    "noImplicitAny": true,
    "module": "commonjs",
    "target": "es6",
    "jsx": "react"
  }
}
4个回答

2020 年 5 月 11 日更新:

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

原答案

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

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

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

希望这一切都有帮助!

猜一猜

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


猜2

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

设置 > 语言和框架 > Typescript > Typescript 语言服务中取消选中重新编译解决了这个问题,尽管根本原因仍然未知。

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

在 Settings > Language & Frameworks > Typescript 中关闭 Typescript Language Service。然后重新打开它。这为我解决了。