我正在导入一个如下所示的对象:
{
"42": {
"DappToken": [
"0xa9B96972A81d98AeF3bD252C116e5D18C93a4cc1",
],
"TokenFarm": [
"0x09c3f825f5347Dbcb59A16DFC83540E034a11511",
]
}
}
我是这样导入的:
import * as networkMapping from "../abis/map.json"
然后访问它像:
const tokenFarmAddressFromMapping = networkMapping["default"][chainId]["TokenFarm"]
为什么我需要使用networkMapping["default"][chainId]["TokenFarm"]
,而不是像使用常规javascript那样只使用networkMapping[chainId]["TokenFarm"]
?
假设您有这个文件:
// file-a.ts
export const a = 1
export const b = 2
export default 3
通常你会导入它的命名导出,如下所示:
import { a, b } from './file-a'
或者它是这样的默认导出:
import defaultExport from './file-a'
或者两者都像这样:
import defaultExport, { a, b } from './file-a'
但是,当您执行import * as someVar from './file-a'
时,您会将所有内容都作为一个对象。
import * as fileA from './file-a'
fileA.a // 1
fileA.b // 2
fileA.default // 3
请注意file-a.ts
中的默认导出没有名称。为了完成这项工作,default
被指定为名称,以便在导入的对象上设置属性名称。
如果你不想要这种行为,那么你只需要导入默认导出:
import fileA from './fileA'
另一点是JSON文件根本没有命名导出,只有一个默认导出,即单个值。因此,您可以假设您的JSON文件等效于以下类型脚本文件:
export default {
"42": {
"DappToken": [
"0xa9B96972A81d98AeF3bD252C116e5D18C93a4cc1",
],
"TokenFarm": [
"0x09c3f825f5347Dbcb59A16DFC83540E034a11511",
]
}
}
所有这一切都意味着您希望使用以下简单语法导入JSON的默认导出:
import networkMapping from "../abis/map.json"