为什么我需要在我的打字稿对象中访问“默认”?

Why do I need to access `default` in my typescript object?

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

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