`yarn add react-router-dom` 和 `yarn add @types/react-router-dom` 有啥区别?

Posted

技术标签:

【中文标题】`yarn add react-router-dom` 和 `yarn add @types/react-router-dom` 有啥区别?【英文标题】:What's the difference between `yarn add react-router-dom` and `yarn add @types/react-router-dom`?`yarn add react-router-dom` 和 `yarn add @types/react-router-dom` 有什么区别? 【发布时间】:2021-10-30 12:48:08 【问题描述】:

在做

yarn add react-router-dom

失败。该应用程序在启动时引发错误,并且 Intellij 将来自 react-router-dom 的导入标记为错误。但是做

yarn add @types/react-router-dom

有效。

不过,我发现的所有示例都显示了第一个 yarn add... 命令。这是react-router-dom 的新功能吗?

如果这有什么不同,我正在使用打字稿。

===编辑===

这是错误消息。这就是我找到解决方案的地方。

/home/dean/src/react/projects/room-reservations-ui_/src/App.tsx
TypeScript error in /home/dean/src/react/projects/room-reservations-ui_/src/App.tsx(5,29):
Could not find a declaration file for module 'react-router-dom'. '/home/dean/src/react/projects/room-reservations-ui_/node_modules/react-router-dom/index.js' implicitly has an 'any' type.
  Try `npm i --save-dev @types/react-router-dom` if it exists or add a new declaration (.d.ts) file containing `declare module 'react-router-dom';`  TS7016

    3 | import './App.css';
    4 | import Navbar from "./components/Navbar";
  > 5 | import BrowserRouter from "react-router-dom";
      |                             ^
    6 | 
    7 | function App() 
    8 |   return (

【问题讨论】:

yarn add react-router-dom 的错误是什么?来自@types 的那个只是@types 组织(docs.npmjs.com/about-organization-scopes-and-packages)下的另一个包,尽管一个提供了另一个的类型,但它们并不相关,我相信你可能会因为找不到类型而出错对于第一个包 【参考方案1】:
yarn add react-router-dom

这是安装react-router-dom,没有任何类型,如果你尝试使用这个包启动你的应用程序,你会看到你得到的消息

Could not find a declaration file for module 'react-router-dom'.

这并不意味着 react-router-dom 有错误,而是 Typescript 没有为其声明类型,该项目可能是使用 javascript 制作的,或者类型声明在其他地方。

yarn add @types/react-router-dom

这将从DefiniteTyped(https://github.com/DefinitelyTyped/DefinitelyTyped)安装react-router-dom的类型,这是一个声明的存储库,因此我们可以为仅为Javascript创建的库安装类型,但其他人“键入”给我们。

@types/

这个前缀是一个组织,它将引用DefinitelyTyped存储库中的react-router-dom包,它不包含react-router-dom代码,只有类型定义,你可以在这里看到https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react-router-dom

它只包含声明,当 Typescript 找不到您正在使用的模块的声明时,它将无法正确显示类型,因此会发出警告

【讨论】:

我已经接受了你的回答,但是其他包不需要@types 前缀:yarn add @material-ui/core yarn add @material-ui/icons 都可以工作。 Material ui 已经在其组件上具有类型定义,例如,github.com/mui-org/material-ui/blob/next/packages/material-ui/…@types 组织在包本身没有类型或作者希望它存在时很有用 【参考方案2】:

简单地说,@types/react-router-dom 包含类型定义。它旨在与打字稿一起使用。你可以看到更多关于这个here。

【讨论】:

【参考方案3】:

我遇到了同样的问题。刚刚从带有类型的节点模块中删除了rrd 并重新安装了它

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于`yarn add react-router-dom` 和 `yarn add @types/react-router-dom` 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

前端导出excel,yarn add exceljs

使用 yarn install 或 add 时防止包重建

yarn add electron安装失败

yarn add electron安装失败

yarn add electron安装失败

需要为 yarn add jest 提供密码