在我的node + TypeScript项目中,我有一个带有一些默认配置的json文件。假设它看起来像这样:
{
prop1: 123,
prop2: 123
}
我正在从这个文件中加载值,就像这样:
import * as defconfig from '../configuration/config.json';
当我在控制台中检查它时,我看到这样的输出:
{
prop1: [Getter],
prop2: [Getter],
default: {
prop1: 123,
prop2: 123
}
}
如果我试图用扩展操作符或对象覆盖这个对象。赋值,结果如下:
const options = {
prop1: 321,
prop2: 321
};
console.log({...defconfig, ...options});
//OR
console.log(Object.assign(defconfing, options));
//produces
{
prop1: 321,
prop2: 321,
default: {
prop1: 123,
prop2: 123
}
}
谁能解释一下默认值是从哪里来的以及如何摆脱它?
相同的代码在不使用.json文件但用正常对象定义配置时工作得很好,但问题是我必须使用该文件。
根据最新的节点版本,JSON文件不能作为模块直接读取。除非你在运行时使用--experimental-json-modules
标志。
一个解决方案是使用commonjs(为此,您需要将文件扩展名更改为。cjs)方法require
,这将能够完成任务,或者您可以使用fs
模块读取JSON字符串,然后解析。