You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过循环迭代简化JavaScript中的条件命名动态导入代码?

简化多语言导入逻辑的实现方案

我希望通过编程方式简化重复的命名导入与赋值代码,避免冗余,想了解是否可以借助循环实现。

当前代码

import { globalLocale } from './i18n'

let locale, dateLocale

if (globalLocale === 'de-DE') {
  const { dateDeDE, deDE } = await import('node_module')

  locale = deDE
  dateLocale = dateDeDE
} else if (globalLocale === 'fr-FR') {
  const { dateFrFR, frFR } = await import('node_module')

  locale = frFR
  dateLocale = dateFrFR
} else {
  const { dateEnUS, enUS } = await import('node_module')

  locale = enUS
  dateLocale = dateEnUS
}

循环简化方案(可行)

你给出的循环方案确实可以实现逻辑简化,代码如下:

import { globalLocale } from './i18n'

let locale, dateLocale

const locales = {
  'de-DE': ['deDE', 'dateDeDE'],
  'fr-FR': ['frFR', 'dateFrFR'],
  'en-US': ['enUS', 'dateEnUS']
}

for (let lang in locales) {
  if (Object.prototype.hasOwnProperty.call(locales, lang)) {
    if (globalLocale === lang) {
      const { [locales[lang][0]]: currentLocale, [locales[lang][1]]: currentDateLocale  } = await import('node_module')

      locale = currentLocale
      dateLocale = currentDateLocale
    }
  }
}

不过这个方案存在小瑕疵:循环会遍历所有语言键,而实际上我们只需要匹配globalLocale对应的项,完全可以跳过循环,直接通过键值映射实现更高效的逻辑:

import { globalLocale } from './i18n'

let locale, dateLocale

const locales = {
  'de-DE': ['deDE', 'dateDeDE'],
  'fr-FR': ['frFR', 'dateFrFR'],
  'en-US': ['enUS', 'dateEnUS']
}

// 获取当前语言对应的导出键,默认用en-US
const [localeKey, dateLocaleKey] = locales[globalLocale] || locales['en-US']
const { [localeKey]: currentLocale, [dateLocaleKey]: currentDateLocale } = await import('node_module')

locale = currentLocale
dateLocale = currentDateLocale

TypeScript 适配方案

如果使用TypeScript,需要从模块实例本身推导类型,确保类型安全:

import { globalLocale } from './i18n'
import { Language } from './models'
import { TDateLocale, TLocale } from 'node_module'

const locales: { [key in keyof Language]: string[] } = {
  'de-DE': ['deDE', 'dateDeDE'],
  'fr-FR': ['frFR', 'dateFrFR'],
}

const moduleLocales = locales[globalLocale as keyof Language] ?? ['enUS', 'dateEnUS']

const module = await import('node_module')

const locale = module[moduleLocales[0] as keyof typeof module] as TLocale
const dateLocale = module[moduleLocales[1] as keyof typeof module] as TDateLocale

内容的提问来源于stack exchange,提问作者d1st0r-s1l3nt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 01:48:27