TypeScript 错误 TS2403:后续变量声明必须具有相同的类型
TypeScript error TS2403: Subsequent variable declarations must have the same type
我的 TypeScript 项目似乎 运行 出现了一些编译错误。完整的错误是:
node_modules/@types/mocha/index.d.ts:2680:13 - error TS2403: Subsequent
variable declarations must have the same type. Variable 'beforeEach'
must be of type 'Lifecycle', but here has type 'HookFunction'.
2680 declare var beforeEach: Mocha.HookFunction;
~~~~~~~~~~
我有 7 个这样的错误都在同一个依赖项 (Mocha) 中。我正在使用 TypeScript ^3.3.3
,这是我的 tsconfig.json
:
{
"compilerOptions": {
"composite": false,
"declaration": true,
"declarationMap": true,
"removeComments": true,
"target": "es2017",
"lib": ["dom", "es2015", "es2016", "es2017"],
"module": "commonjs",
"moduleResolution": "node",
"esModuleInterop": true,
"resolveJsonModule": true,
"jsx": "preserve",
"allowJs": false,
"strict": true,
"noFallthroughCasesInSwitch": true,
"noImplicitReturns": true,
"noImplicitAny": true,
"strictNullChecks": true,
"sourceMap": true,
"outDir": "build",
"noUnusedParameters": true,
"noUnusedLocals": false,
"baseUrl": ".",
"paths": {
"*": ["./types/*"],
},
"rootDir": "./src",
"typeRoots": ["./@types", "./node_modules/@types"]
},
"exclude": [
"node_modules",
"build",
"dist",
"__mocks__",
"__tests__",
"coverage",
"*.config.js",
"*.babel.js",
"*.test.ts",
"specs"
]
}
此外,这些是我的开发依赖项:
"devDependencies": {
"@types/jest": "^24.0.9",
"@types/koa": "^2.0.48",
"@types/lodash": "^4.14.121",
"@types/mocha": "^5.2.6",
"@types/twig": "^1.12.2",
"@types/uuid": "^3.4.4",
"chai": "^4.1.2",
"concurrently": "^4.1.0",
"db-migrate": "^0.11.5",
"dotenv": "^6.0.0",
"grunt": "^1.0.3",
"grunt-cli": "^1.2.0",
"jest": "^23.1.0",
"nodemon": "^1.17.2",
"ts-jest": "^23.10.5",
"ts-node": "^8.0.2",
"tslint": "^5.14.0",
"typescript": "^3.3.3"
}
这是我的编译命令:
tsc src/index.ts
您可以将 @types/mocha
替换为 @types/jest
看起来 @types/mocha
和 @types/jest
有相似的声明。因此,如果两者都有,请卸载 @types/mocha
:
npm uninstall @types/mocha
.
这解决了我的问题。
我在 tsconfig 文件中添加了以下 属性
"compilerOptions": {
"skipLibCheck": true
},
这告诉 TypeScript 我们要跳过 node_modules 文件夹中库的类型检查。这可以节省编译时间并阻止节点模块中的冲突类型破坏构建。
对于那些想要解释为什么你可能需要这个选项的人,这里有一个资源 link https://www.typescriptlang.org/tsconfig#skipLibCheck
TL;DR:不,您不能将 mocha
(以及其他使用 mocha
的测试运行器,例如 web-test-runner
)放在同一个模块中。
类型只能定义一次,mocha
和 jest
声明了一系列彼此不兼容的全局变量(需要它们才能直接使用而无需导入)。您需要选择一个或另一个,或者如果您使用 web-test-runner
或 electron-mocha
之类的东西,只需选择另一个跑步者(例如 cypress
就可以)。
任何解决方法都会隐藏一个或另一个,因此最终您无法同时使用它们。归根结底,将两个测试运行器声明为依赖项可能不是一个好主意,因此您不妨重构代码以选择其中一个。
我的 TypeScript 项目似乎 运行 出现了一些编译错误。完整的错误是:
node_modules/@types/mocha/index.d.ts:2680:13 - error TS2403: Subsequent
variable declarations must have the same type. Variable 'beforeEach'
must be of type 'Lifecycle', but here has type 'HookFunction'.
2680 declare var beforeEach: Mocha.HookFunction;
~~~~~~~~~~
我有 7 个这样的错误都在同一个依赖项 (Mocha) 中。我正在使用 TypeScript ^3.3.3
,这是我的 tsconfig.json
:
{
"compilerOptions": {
"composite": false,
"declaration": true,
"declarationMap": true,
"removeComments": true,
"target": "es2017",
"lib": ["dom", "es2015", "es2016", "es2017"],
"module": "commonjs",
"moduleResolution": "node",
"esModuleInterop": true,
"resolveJsonModule": true,
"jsx": "preserve",
"allowJs": false,
"strict": true,
"noFallthroughCasesInSwitch": true,
"noImplicitReturns": true,
"noImplicitAny": true,
"strictNullChecks": true,
"sourceMap": true,
"outDir": "build",
"noUnusedParameters": true,
"noUnusedLocals": false,
"baseUrl": ".",
"paths": {
"*": ["./types/*"],
},
"rootDir": "./src",
"typeRoots": ["./@types", "./node_modules/@types"]
},
"exclude": [
"node_modules",
"build",
"dist",
"__mocks__",
"__tests__",
"coverage",
"*.config.js",
"*.babel.js",
"*.test.ts",
"specs"
]
}
此外,这些是我的开发依赖项:
"devDependencies": {
"@types/jest": "^24.0.9",
"@types/koa": "^2.0.48",
"@types/lodash": "^4.14.121",
"@types/mocha": "^5.2.6",
"@types/twig": "^1.12.2",
"@types/uuid": "^3.4.4",
"chai": "^4.1.2",
"concurrently": "^4.1.0",
"db-migrate": "^0.11.5",
"dotenv": "^6.0.0",
"grunt": "^1.0.3",
"grunt-cli": "^1.2.0",
"jest": "^23.1.0",
"nodemon": "^1.17.2",
"ts-jest": "^23.10.5",
"ts-node": "^8.0.2",
"tslint": "^5.14.0",
"typescript": "^3.3.3"
}
这是我的编译命令:
tsc src/index.ts
您可以将 @types/mocha
替换为 @types/jest
看起来 @types/mocha
和 @types/jest
有相似的声明。因此,如果两者都有,请卸载 @types/mocha
:
npm uninstall @types/mocha
.
这解决了我的问题。
我在 tsconfig 文件中添加了以下 属性
"compilerOptions": {
"skipLibCheck": true
},
这告诉 TypeScript 我们要跳过 node_modules 文件夹中库的类型检查。这可以节省编译时间并阻止节点模块中的冲突类型破坏构建。 对于那些想要解释为什么你可能需要这个选项的人,这里有一个资源 link https://www.typescriptlang.org/tsconfig#skipLibCheck
TL;DR:不,您不能将 mocha
(以及其他使用 mocha
的测试运行器,例如 web-test-runner
)放在同一个模块中。
类型只能定义一次,mocha
和 jest
声明了一系列彼此不兼容的全局变量(需要它们才能直接使用而无需导入)。您需要选择一个或另一个,或者如果您使用 web-test-runner
或 electron-mocha
之类的东西,只需选择另一个跑步者(例如 cypress
就可以)。
任何解决方法都会隐藏一个或另一个,因此最终您无法同时使用它们。归根结底,将两个测试运行器声明为依赖项可能不是一个好主意,因此您不妨重构代码以选择其中一个。