我面临着无法解决的问题。 我想在我的班级文件之间共享一些接口和类型。
我的仓库就是这样:
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;
}
}
如果我在LabeledValue
中导入index.ts
,则会出现错误,并且我不理解原因:
import { LabeledValue} from 'test'; // TS2307: Cannot find module 'test'.
src / 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代码中,并带有yarn build
(带有实际代码)。使用此代码,您可以使用yarn tsc src/index.ts
来显示错误。
您知道我如何解决这个问题吗?
答案 0 :(得分:3)
您正在使用ES导入进行导入:
import {LabeledValue} from 'test';
因此,您需要具有ES模块(不是namespace/module
关键字,它们是TypeScript模块)。
您的index.d.ts
应该如下所示:
export interface LabeledValue {
label: string;
size: number;
}
根级别export
使文件成为ES模块,现在您的ES import
将可以工作。
答案 1 :(得分:0)
我解决了安装eslint-import-resolver-typescript和默认配置的问题。