我试着写一些剧作家测试,需要一些设置。这个设置在剧作家配置文件中被称为全局设置。
安装程序有一个import语句:import { X, Y, Z} from '../../fixtures';
下面是我的tsconfig.json:
{
"compilerOptions": {
"target": "es2018",
"module": "Node16",
"experimentalSpecifierrResolution": "node",
"sourceMap": true,
"esModuleInterop": true,
"strict": false,
"lib": [
"dom",
"es2018"
],
"types": [
"node",
"cypress",
"cypress-real-events"
],
"moduleResolution": "node",
},
"include": [
"**/*.ts"
]
}
当然,在我的package.json文件中,我有:"type": "module"
我不明白的是,当我尝试运行这些测试时,我得到以下错误:
Error: Cannot find module 'C:\Users\x\project\e2e\fixtures' imported from C:\Users\x\projects\e2e\playwright\support\setupTests.ts
但是如果我使用扩展名导入:import { X, Y, Z} from '../../fixtures.ts';
一切顺利。
我不明白。尤其是我在安装文件中有其他不使用.ts扩展名的导入,它们不会引起任何问题。
我已经在我的import语句中包含了.ts扩展名的变通方法。它实际上正确地运行了我的测试和安装文件。
唯一的问题是我在IDE中得到一个Typescript警告:TS2691:导入路径不能以“.ts”扩展名结尾。
我对这种行为感到困惑。
1条答案
按热度按时间bvjveswy1#
好吧,我终于明白它是怎么工作的了。
阅读完这里:https://www.typescriptlang.org/docs/handbook/esm-node.html
执行相对导入的正确方法是:
当你有fixtures.ts时,Typescript会感到困惑,并会给予你警告。如果没有扩展名,编译后的javascript文件就没有意义了,因为ESM希望你有扩展名:
相对导入路径需要完整的扩展名(例如,我们必须写import“./foo.js”而不是import“./foo”)
所以是的,我仍然觉得导入一个还不存在的文件有点奇怪。但这只是 typescript 的一个特点。