【问题标题】:Typescript: Cannot find type definition file for 'bin', 'src', 'test'打字稿:找不到“bin”、“src”、“test”的类型定义文件
【发布时间】:2020-05-09 08:30:24
【问题描述】:

我是前端的新手,我可能很笨。但是,简而言之,如果我这样做

yarn add @mapbox/polyline

yarn start时突然收到各种类似这样的有用错误:

undefined
TypeScript error in undefined(undefined,undefined):
Cannot find type definition file for 'bin'.  TS2688

undefined
TypeScript error in undefined(undefined,undefined):
Cannot find type definition file for 'src'.  TS2688

index.js:1 undefined
TypeScript error in undefined(undefined,undefined):
Cannot find type definition file for 'test'.  TS2688

好的,酷。所以我已经彻底破坏了这个 (git) 分支(一直在那里!),所以让我们切换回工作中的 master 分支......但是 yarn start 现在在 master 上产生相同的错误!就好像仅仅键入yarn add @mapbox/polyline 的行为就会严重破坏本地的某些东西,以至于无法恢复。我最终不得不再次克隆我的仓库并重新开始。

(由于我使用的是 Typescript,我还尝试添加类型 yarn add @types/mapbox__polyline...这并不能减轻我的痛苦。)

知道如何解决这个问题吗?

【问题讨论】:

  • 你是否在你的包名中指定@types? (你不应该)
  • @FrançoisRomain 是的,如上所述
  • 或者也许有一个包指定了 @types 像这里:github.com/microsoft/TypeScript/issues/…
  • @FrançoisRomain 是的,看到了。没关系,只是yarn add @mapbox/polyline的行为

标签: reactjs typescript webpack yarnpkg


【解决方案1】:

以防万一它对其他人有帮助,在tsconfig.json 中将"types": [] 添加到compilerOptions 修复它。

我不清楚为什么会这样。我刚刚决定尝试在this bug report 中找到的建议,我不确定它是否相关。

【讨论】:

    【解决方案2】:

    发生此错误是因为您在 node_modules/@types 中有“垃圾”和/或您的 tsconfig.json 配置不正确。为了准确了解发生了什么,您需要了解有关 TypeScript 的以下内容:

    tsconfig.json中有两个字段与此问题相关:"typeRoots""types"

    {
      "compilerOptions": {
        "typeRoots": [],
        "types": []
      }
    }
    

    "typeRoots" 指定 TypeScript 将在哪里寻找“类型”(我稍后会讨论什么是类型)。如果 tsconfig.json 中没有 "typeRoots",那么 TypeScript 会在 node_modules/@types/ 中查找类型。

    那么,什么是“类型”?类型是一个 folder,其中包含 index.d.ts 文件(或其中包含 package.json 的文件夹,指定类型文件的不同路径/名称)。

    "types" 限制 "typeRoots",允许 TypeScript 仅在 "typeRoots" 中指定名称的文件夹中查找类型。例如。如果您的tsconfig.json 包含:

    {
      "compilerOptions": {
        ...
        "typeRoots": ['./node_modules/@types'],
        "types": ['aaaaaa'],
        ...
      },
      ...
    }
    

    那么只有./node_modules/@types/aaaaaa将用于类型,而./node_modules/@types/bbbbbb将被忽略(实际上,它只会被部分忽略,只有它里面的全局变量会被忽略,关于它里面的类型的其他信息将是照常使用)。

    因此,在您的情况下(假设您的 tsconfig.json 中没有 "typeRoots"),您很可能会收到“找不到类型定义文件”错误,因为您的内部有垃圾(即 subdirectories that do not contain index.d.ts filesnode_modules/@types 在运行 yarn add @mapbox/polyline 之后。这也可以解释为什么当你切换 git 分支时这个错误没有得到修复(因为 git 不跟踪 node_modules)。

    【讨论】:

    • 很好的答案。我早就摆脱了这个错误,但向你投了赞成票。
    【解决方案3】:

    通常您会添加@types\mapbox\polyline 包。 但是分型可能不存在

    如果你想禁止这些(如果类型不存在),你可以在你的项目中添加一个文件

    mapbox-polyline.d.ts(或您选择的任何名称,只要它以.d.ts 结尾)

    与当前内容

    declare module '@mapbox/polyline'

    更新:我已经测试过添加这个包和 yarn add mapbox/polyline 似乎正在导入它。 然而,git repo 说折线已经被@mapbox/polyline 弃用,所以打字作者可能没有赶上。

    更新:我建议卸载您现在拥有的软件包,然后使用最新版本的 @mapbox/polyline 重新安装 yarn add @mapbox/polyline,然后通过添加上面的环境声明来抑制 typecrpt 警告。

    【讨论】:

    • 你试过没有@ 吗?通常只有类型库以 and 为前缀。例如yarn add mapbox/polyline
    • 输入的内容可能与实际的 repo 不是最新的。我查看了 github 中的 src,那个库太小了,如果你愿意的话,你可以在很短的时间内自己编写类型
    • 你按照我上面描述的方式添加js了吗?
    猜你喜欢
    • 2018-01-16
    • 2017-04-26
    • 2022-01-06
    • 2021-10-27
    • 2020-01-10
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 2020-05-07
    相关资源
    最近更新 更多