【问题标题】:TS2307: Cannot find module or its corresponding type declarationsTS2307:找不到模块或其对应的类型声明
【发布时间】:2021-08-27 07:25:40
【问题描述】:

我有一个私人 GitHub 存储库 my-parser-generator,它使用 pegjs。所有底层逻辑都用 TypeScript 编写,然后编译并馈送到pegjs,后者生成最终的解析器。

然后这个回购 在另一个私有 repo parser-consumer 中使用包依赖项,它是用 TypeScript 编写的(使用 --declaration 选项编译)。所以my-parser-generator 基本上是向 TypeScript 消费者提供 JavaScript 文件。

但是当我尝试导入新生成的解析器时,我收到以下错误: TS2307: Cannot find module 'my-parser-generator' or its corresponding type declarations

我已经尝试了互联网上的大多数解决方案,但没有一个对我有用

我的解析器生成器

package.json(大部分行省略)

{
  "private": true,
  "version": "0.4.9",
  "name": "my-parser-generator",
  "files": [
    "dist/lib/**/*.js",
    "dist/excel.browser.js",
    "dist/**/*.d.ts",
    "dist/**/*.js.map"
  ],
 "main": "dist/excel.browser.js",
 "typings": "dist/index.d.ts",
 "type": "module",
 "dependencies": {
   "pegjs": "^0.11.0-master.b7b87ea"
 }
}

tsconfig.json

{
  "compilerOptions": {
    "target": "es2019",
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "module": "esnext",
    "moduleResolution": "node",
    "noFallthroughCasesInSwitch": true,
    "outDir": "dist/lib/",
    "sourceMap": true
  },
  "exclude": ["node_modules", "dist", "tests", "excel.browser.js"],
  "include": ["src/**/*"]
}

dist/excel.browser.js(由pegjs 生成,因此所有代码都被省略了,以支持导出)

export {
  peg$SyntaxError as SyntaxError,
  peg$parse as parse
};

export default {
  SyntaxError: peg$SyntaxError,
  parse: peg$parse
};

dist/index.d.ts - 我尝试为上面生成的文件添加一些类型

declare namespace MyParserGenerator {
    type PegLocation = {
        offset: number,
        line: number,
        column: number
    }

    type Options = {
        startRule: string,
        filename: string
    }

    function SyntaxError (message: string, expected: string, found: string, location: PegLocation): void;
    function parse <T extends Options>(input: string, options: T): any;
}

declare module "my-parser-generator" {
    export default MyParserGenerator
}

解析器消费者

package.json

{
  ...,
  dependencies: {
    "my-parser-generator": "git+ssh://git@github.com/my-repo/my-parser-generator.git#master",
    ...,
  },
  ...,
}

node_modules/my-parser-generator - 包结构

dist/
  lib/
    grammar.js
    grammar.d.ts
    grammar.js.map
  excel.browser.js
  index.d.ts
package.json
README.md

index.ts - 使用解析器并抛出错误的代码

import parser from 'my-parser-generator';

有趣的是,WebStorm 可以轻松定位并自动完成包

【问题讨论】:

    标签: json typescript github node-modules pegjs


    【解决方案1】:

    在您的parser-consumerpackage.json 中添加以下行为devDependencies

    {
      ...,
      devDependencies: {
        "my-parser-generator": "git+ssh://git@github.com/my-repo/my-parser-generator.git#master",
        ...,
      },
      ...,
    }
    

    【讨论】:

      【解决方案2】:

      关于解析器的声明,您可以使用节点模块中的pegjs/typings/generated-parser.d.ts 作为起点。

      对于消息找不到 my-parser-generator 或其相应的声明。我怀疑这可能是因为(1)您将index.d.ts保存在dist文件夹而不是包根目录中,(2)js文件是dist/excel.browser.js,这很容易与dist/excel.browser.d.ts相关联。

      我会根据typescript publication guidelines添加你的my-parser-generator/package.json

      {
        "types": "dist/index.d.ts"
      }
      

      【讨论】:

        猜你喜欢
        • 2022-10-17
        • 2021-11-23
        • 2021-05-14
        • 2021-04-15
        • 2021-04-08
        • 2022-10-06
        • 2021-12-21
        • 2021-03-17
        • 2021-01-19
        相关资源
        最近更新 更多