TS2307:找不到模块或其对应的类型声明

时间:2021-06-10 09:36:47

标签: json typescript github node-modules pegjs

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

然后这个 repo a 在另一个私有存储库 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 可以轻松定位并自动完成包

error screenshot

2 个答案:

答案 0 :(得分:2)

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

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

我会根据 typescript publication guidelines

添加您的 dist/excel.browser.d.ts
my-parser-generator/package.json

答案 1 :(得分:0)

在您的 parser-consumer 中,package.json 添加以下行作为 devDependencies

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