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

能否从已导入模块二次导入?AWS SDK导入方案咨询

解决方案

关于「从已导入模块再次导入」的问题

ES模块的import语法要求模块路径必须是字符串字面量,不能用变量(比如你代码里的aws),所以import { MessageAttributeMap } from aws;这种写法从语法上就不支持。

针对你的公共项目场景,有两种可行的调整方式:

方式1:在公共项目中直接导出需要的类型

修改公共项目的index.ts,把常用的类型直接导出:

export * as AWS from "aws-sdk";
// 直接导出需要的类型
export { MessageAttributeMap } from "aws-sdk/clients/sns";
// 其他常用类型也可以按需添加
export { S3 } from "aws-sdk/clients/s3";

这样业务项目里就能直接从公共包导入:

import { AWS as aws, MessageAttributeMap } from "@test/common";

方式2:在公共项目中导出子模块的引用

如果不想逐个导出类型,可以在公共项目里导出子模块的入口:

export * as AWS from "aws-sdk";
// 导出sns子模块
export * as SNS from "aws-sdk/clients/sns";

业务项目里就可以这样用:

import { SNS } from "@test/common";
type MessageAttributeMap = SNS.MessageAttributeMap;

关于「例2的替代方案」

结合你的公共包场景,上面两种方式已经解决了这个问题——要么直接导入MessageAttributeMap类型,要么通过公共包导出的子模块来引用类型,不用再写AWS.SNS.MessageAttributeMap这种长路径。

如果暂时不想修改公共项目,也可以在业务项目里用类型别名简化写法(但不如修改公共包优雅):

import { AWS as aws } from "@test/common";
type MessageAttributeMap = aws.SNS.MessageAttributeMap;
// 也可以给子模块加别名简化调用
const SNS = aws.SNS;

内容的提问来源于stack exchange,提问作者CKT

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:32:08