React Typescript: 第0行:解析错误:无法读取未定义的属性“name”

34

今天我突然开始在使用TypeScript构建的项目中遇到构建错误。在一个文件中,尽管它(或任何被它引用的内容)已经数周未改变,我开始看到以下错误信息:

./path/to/my/file.ts
  Line 0:  Parsing error: Cannot read property 'name' of undefined

这个错误最初在我们的CI上出现,可以在服务器上手动构建进行复制,并且我在更新所有软件包后才能在自己的电脑上(本来运行得很好)复现。 现在,即使我拉取项目的旧(building)提交,也无法构建它。 我已经将yarn.lock提交到我的仓库中,但即使使用旧的package.jsonyarn.lock(我删除node_modules并执行yarn),我也不能构建。

今天这个错误突然就出现了。

可能的原因是什么?


我的(可能相关的)版本:

yarn 1.22.4,
node v13.11.0,
typescript 3.7.5
react 16.12
react-scripts 3.4.0
macOS 10.15 Catalina

1
我也遇到了同样的问题,你找到导致错误的原因了吗? - Kenjoe
@Kenjoe,问题现在已经自行解决了。可能是依赖项的对等依赖项配置不正确所致。 - Can Poyrazoğlu
8个回答

30

问题似乎是由某个依赖项的(同级?)依赖项,react-scripts与TypeScript模板的配置错误引起的。问题已经解决。请确保更新依赖项,清除node_modules,甚至清除package-lock.jsonyarn.lock,然后再进行一次新的构建。


2
升级到 3.8.X 后仍无改善,尝试删除 node_modules 并重新安装,问题得以解决。 - devonj
1
将TS更新到3.8.x版本后,我的eslint问题得到了解决,但在清除了node_modules和* -lock.json文件之前,我一直无法构建成功。为了确保一切正常,我还关闭并重新打开了我的IDE,现在一切都正常了。 - George
4
2020年8月,我的一个自动依赖库 dependabot 升级到了 ^4.0.2,导致问题出现。为解决此问题,我将 Typescript 回滚至 ^3.9.5 版本。个人情况可能有所不同。 - Jeff
1
如果您在升级到TS 4.0后遇到此问题,那是因为create-react-app尚不支持TS 4.0(更准确地说,它的依赖项不支持)。https://github.com/facebook/create-react-app/issues/9515 您可以通过降级TS、使用CRA 4.0的预发布版本或强制固定您的ts-eslint和解析器依赖项来解决此问题,详情请参见 https://github.com/facebook/create-react-app/issues/9515。 - sam256

8

如果是使用以下命令生成的应用程序:

npx create-react-app my-app --template typescript

更准确地说,使用的是create-react-app@3.4.1版本。

该问题可以通过运行以下命令解决:

rm yarn-lock && rm -rf node_modules && npm i

之后,您可以运行以下命令之一:

yarn startnpm start


感谢提到 create-react-app。遵循这个方法解决了我的问题。 - George
尽管我试了几次删除yarn.lock并运行yarn,但最终我还是成功地使用yarn编译了该应用程序。 - Mateja Petrovic
对我来说很有效!只需删除 node_modules 然后运行 yarn,就完成了。 - Quentin D

4

只需将 TypeScript 版本升级到 3.8.x:链接


10
不行,没有解决我的问题。我甚至升级到了3.9的最新版,但仍然没有改变。 - Can Poyrazoğlu
在4.0版本上,仍然遇到同样的问题。 - Anchor

3
在我的情况下,我只需要在ts文件末尾添加一个额外的换行符。
export * from './result';
export * from './request';
//new line here

2

更新 react-scripts 对我有用。可能是因为 react-scripts 3.4.0 不支持 typescript 3.7.5


2
在我的情况下,罪魁祸首是导入不存在文件的资产,例如:
import { ReactComponent as SomeIcon } from '../assets/img/some-icon.svg';

上面的答案帮助我找到了罪魁祸首。我运行了rm -rf node_modules package-lock.json && npm i && npm start这导致真正的错误被显示出来(而不是无用的难以理解的"Line 0: Parsing error: Cannot read property 'name' of undefined")。 一旦我添加了缺失的文件,错误就消失了。

2

出现此错误是因为您的typescript与typescript-eslint插件不兼容。

您可以通过将这两个依赖项升级到最新版本来解决此问题。

"devDependencies": {
  "@typescript-eslint/eslint-plugin": "^4.6.0",
  "@typescript-eslint/parser": "^4.6.0",
}

0
在我的情况下,这是因为我在.\src下有TS代码引用了.\tools下的TS代码,但我在tsconfig.jsoninclude中只有src,添加tools解决了问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接