Javascript Mocha使用全局范围中定义的类型测试TypeScript
我目前正在为一个遗留应用程序构建一个测试框架,该应用程序有许多Javascript Mocha使用全局范围中定义的类型测试TypeScript,javascript,node.js,reactjs,typescript,mocha.js,Javascript,Node.js,Reactjs,Typescript,Mocha.js,我目前正在为一个遗留应用程序构建一个测试框架,该应用程序有许多类型.ts文件,这些文件定义了类型,但在文件的顶层没有任何导入/导出。例如,我们有一个只包含 interface Pills { id: number, // more properties } ,如果没有导入/导出,则该文件被视为一个模块,并且是全局范围的一部分。任何使用类型的文件都会使用该类型,而不会显式导入该类型。这在我们的web应用程序中目前运行良好,它作为webpack包运行 但是,当我尝试使用在NodeJ上运行的mo
类型.ts
文件,这些文件定义了类型,但在文件的顶层没有任何导入/导出。例如,我们有一个只包含
interface Pills {
id: number,
// more properties
}
,如果没有导入/导出,则该文件被视为一个模块,并且是全局范围的一部分。任何使用类型的文件都会使用该类型,而不会显式导入该类型。这在我们的web应用程序中目前运行良好,它作为webpack
包运行
但是,当我尝试使用在NodeJ上运行的mocha
运行测试时,我得到以下错误:
app/javascript/components/HardwareTestReports/table.tsx(18,16): error TS2304: Cannot find name 'Pill'.
app/javascript/components/HardwareTestReports/table.tsx(106,56): error TS2304: Cannot find name 'Pill'.
这是因为mocha
在NodeJS上运行,需要文件显式声明导出/导入吗
我的.tsconfig
如下所示:
{
"compilerOptions": {
"declaration": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": ["es7", "dom", "esnext"],
"module": "es6",
"moduleResolution": "node",
"sourceMap": true,
"target": "es6",
"jsx": "react",
"esModuleInterop": true
},
"exclude": ["node_modules", "vendor", "public", "test"],
"compileOnSave": false
}
My package.json具有以下测试脚本:
"scripts": {
"test": "TS_NODE_PROJECT='./tsconfig.json' mocha -r ts-node/register -r esm test/**/*.ts"
},
这是因为mocha
在NodeJS上运行,需要文件显式声明导出/导入吗
重构types.ts
文件以显式导入/导出其类型目前不是一个选项-我们有许多相互交织的类型,更新每个文件以包含导入/导出将涉及到几乎触及代码库中的每个文件-这肯定是一个需要解决的长期项目