为什么我需要访问typescript对象中的"default"



我正在导入一个如下所示的对象:

{
"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"

最新更新