所以我写了一个这样的函数来获取多个环境的测试数据:
export class DataHelper {
public static async getTestData(fileName: string): Promise<any> {
return await import(`../${fileName}`);
}
}
这将抛出:错误:找不到模块“website.json”
await DataHelper.getTestData('test-data.json')
但这个可以
await DataHelper.getTestData('TestScript')
这也将起作用:
await import('../test-data.json')
这是我的tsconfig.json
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"declaration": true,
"sourceMap": true,
"outDir": "./lib",
"moduleResolution": "node",
"baseUrl": ".",
"esModuleInterop": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"resolveJsonModule": true
},
"include": ["src", "example/**/*"],
"exclude": ["node_modules", "**/__tests__/*"]
}
谁能解释一下发生了什么,我应该怎么做?
1条答案
按热度按时间2ledvvac1#
如果不使用importAssert,你实际上无法在TypeScript中动态导入json文件。TypeScript只允许你通过配置属性导入扩展名为
json
的文件,这与JavaScript规范有很大的不同,这可能会让很多人感到困惑。下面是importAssert的样子,但它们目前在Node.js上不支持:也就是说,您必须AssertTLDR,因为出于安全原因,不能使用文件扩展名来确定文件类型。
无论如何,在Node.js中异步获取JSON的最佳方法是通过
fs
读取文本,然后使用JSON.parse
。至少,直到Node.js添加了对导入Assert的支持,我认为这在几年内不会稳定。下面是一个例子:
事后
你仍然可以使用
require
来加载JSON文件,但我强烈建议不要这样做,因为它是同步的,所以它会停止你的程序的整个进程。