繁体   English   中英

index.d.ts 错误 TS2307: 找不到我自己的模块

[英]index.d.ts error TS2307: Cannot find my own module

我面临一个我无法解决的问题。 我想在我的 class 文件之间共享一些接口和类型。

我的回购是这样的:

test
  -> dist/
  -> src/
    -> index.ts
  -> .babelrc
  -> .eslintrc.js
  -> index.d.ts
  -> package.json
  -> tsconfig.json

index.d.ts

declare module test { // I've try with 'declare namespace test' but the result is the same
  export interface LabeledValue {
    label: string;
    size: number;
  }
}

如果我在index.ts中导入LabeledValue ,我会收到一个错误,而且我不明白原因: import { LabeledValue} from 'test'; // TS2307: Cannot find module 'test'. import { LabeledValue} from 'test'; // TS2307: Cannot find module 'test'.

源代码/index.ts

import {LabeledValue} from 'test';

function printLabel(labeledObj: LabeledValue) {
  console.log(labeledObj.label);
}

let myObj = {size: 10, label: "Size 10 Object"};
printLabel(myObj);

package.json:

{
  "name": "test",
  "types": "index.d.ts",
  "version": "1.0.0",
  "description": "test",
  "author": "oyabi",
  "license": "MIT",
  "private": true,
  "scripts": {
    "type-check": "tsc --noEmit",
    "type-check:watch": "yarn type-check --watch",
    "build": "npm run build:types && npm run build:js",
    "build:types": "tsc --emitDeclarationOnly",
    "build:js": "babel src --out-dir dist --extensions \".ts,.tsx\" --source-maps inline"
  },
  "dependencies": {
    "axios": "^0.19.0",
    "body-parser": "^1.18.3",
    "express": "^4.16.4",
    "helmet": "^3.21.2",
    "morgan": "^1.9.1",
    "winston": "^3.1.0"
  },
  "devDependencies": {
    "@babel/cli": "^7.7.0",
    "@babel/core": "^7.7.2",
    "@babel/plugin-syntax-class-properties": "^7.0.0",
    "@babel/polyfill": "^7.7.0",
    "@babel/preset-env": "^7.7.1",
    "@babel/preset-typescript": "^7.7.2",
    "@babel/runtime": "^7.7.2",
    "@types/express": "^4.17.2",
    "@types/helmet": "^0.0.45",
    "@types/morgan": "^1.7.36",
    "@types/qrcode": "^1.3.4",
    "@typescript-eslint/eslint-plugin": "^2.7.0",
    "@typescript-eslint/parser": "^2.7.0",
    "apidoc": "^0.18.0",
    "babel-core": "^7.0.0-bridge",
    "babel-eslint": "^10.0.1",
    "babel-jest": "^24.8.0",
    "babel-plugin-transform-class-properties": "^6.24.1",
    "babel-preset-airbnb": "^4.2.0",
    "babel-preset-env": "^1.7.0",
    "eslint": "^6.6.0",
    "eslint-config-airbnb-base": "^14.0.0",
    "eslint-config-prettier": "^6.5.0",
    "eslint-friendly-formatter": "^4.0.1",
    "eslint-plugin-import": "^2.18.2",
    "eslint-plugin-jest": "^23.0.4",
    "eslint-plugin-prettier": "^3.1.0",
    "jest": "^24.8.0",
    "moxios": "^0.4.0",
    "nodemon": "^1.19.4",
    "prettier": "^1.19.1",
    "retire": "^2.0.1",
    "supertest": "^4.0.2",
    "typescript": "^3.7.2",
    "uuid": "^3.3.2"
  }
}

.babelrc

{
  "presets": ["@babel/typescript",
    ["airbnb", {
      "useBuiltIns": "usage"
    }]
  ],
  "plugins": [
    "syntax-class-properties",
    "transform-class-properties"
  ]
}

.eslintrc

module.exports = {
  root: true,
  parser: "@typescript-eslint/parser",
  parserOptions: {
    sourceType: "module",
    project: "./tsconfig.json"
  },
  env: {
    node: true,
    jest: true
  },
  extends: [
    "airbnb-base",
    "plugin:@typescript-eslint/recommended",
    "plugin:jest/recommended",
    "plugin:prettier/recommended",
    "prettier/@typescript-eslint",
    "plugin:import/errors",
    "plugin:import/warnings",
    "plugin:import/typescript"
  ],
  plugins: ["@typescript-eslint", "jest", "import"],
  rules: {
    "import/no-commonjs": "error",
    "import/no-amd": "error",
    // allow debugger during development
    "no-debugger": process.env.NODE_ENV === "production" ? 2 : 0,
    "no-underscore-dangle": 0,
    "prettier/prettier": [
      2,
      {
        printWidth: 80,
        singleQuote: true,
        trailingComma: "all"
      }
    ]
  },
  settings: {
    "import/resolver": {
      node: {
        extensions: [".js", ".jsx", ".ts", ".tsx"]
      }
    }
  }
};

tsconfig.json

{
  "compilerOptions": {
    "target": "esnext",
    "module": "commonjs",
    "declaration": true,
    "outDir": "./dist",
    "strict": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "noImplicitThis": true,
    "esModuleInterop": true,
    "resolveJsonModule": true
  },
  "include": ["index.d.ts"]
}

我的真实代码更复杂,但您对问题有很好的了解。 该错误出现在 Visual Studio Code 和yarn build (使用真实代码)中。 使用此代码,您可以使用yarn tsc src/index.ts来显示错误。

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

我通过安装eslint-import-resolver-typescript和默认配置解决了我的问题。

您正在使用 ES 导入进行导入:

import {LabeledValue} from 'test';

因此,您需要有一个 ES 模块(不是namespace/module关键字,它们是 TypeScript 模块)。

使固定

您的index.d.ts应如下所示:

  export interface LabeledValue {
    label: string;
    size: number;
  }

根级export使文件成为 ES 模块,现在您的 ES import将起作用。

确保你的文件以.ts结尾

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM