我有一个由SNS队列触发的AWS lambda函数,它应该从它接收的消息中提取一些数据,格式化它,然后将它发送到另一个SNS队列.在我try 发送到第二个队列之前,一切都很顺利.为了做到这一点,我安装了@aws-sdk/client-sns,并试图发送一条简单的消息.当我运行代码时,它会抛出与无法找到TypeScript定义相关的以下错误:

✖ in ./node_modules/@aws-sdk/client-sns/dist-es/index.js 1:0-22
    Module not found: Error: Can't resolve './SNS' in '/Users/userName/development/aws-sdk-error/node_modules/@aws-sdk/client-sns/dist-es'
    resolve './SNS' in '/Users/userName/development/aws-sdk-error/node_modules/@aws-sdk/client-sns/dist-es'
      using description file: /Users/userName/development/aws-sdk-error/node_modules/@aws-sdk/client-sns/package.json (relative path: ./dist-es)
        using description file: /Users/userName/development/aws-sdk-error/node_modules/@aws-sdk/client-sns/package.json (relative path: ./dist-es/SNS)
          no extension
            /Users/userName/development/aws-sdk-error/node_modules/@aws-sdk/client-sns/dist-es/SNS doesn't exist
          .ts
            /Users/userName/development/aws-sdk-error/node_modules/@aws-sdk/client-sns/dist-es/SNS.ts doesn't exist
          tsx
            /Users/userName/development/aws-sdk-error/node_modules/@aws-sdk/client-sns/dist-es/SNStsx doesn't exist
          as directory
            /Users/userName/development/aws-sdk-error/node_modules/@aws-sdk/client-sns/dist-es/SNS doesn't exist

这是引发错误的文件的简化版本:

import { SNSClient, PublishCommand } from '@aws-sdk/client-sns';

export const showError = async () => {

  const client = new SNSClient( { region: 'us-west-1' } );

  const params = {
    Message: 'some text',
    TopicArn: 'arn:aws:sns:us-east-1:111111111111:someOtherTopic'
  };

  try {
    await client.send( new PublishCommand( params ));
  } catch ( error ) {
  }
};

我已经搜索了几个小时,还没有找到问题所在,尽管我已经try 更改我的tsconfig.json文件中的值,并try 了多个版本的Node(14.x、16.x、18.x),但我想使用16.15.0.如果您能帮我解决这个问题,我们将不胜感激.

我在Github上创建了一个示例回购协议,显示了实际操作中的错误:https://github.com/autoboxer/aws-sdk-error

推荐答案

看起来@aws-sdk/client-sns/dist-es内的模块是从vanilla JS文件导出的,根据您在webpack配置中配置模块分辨率的方式,可能无法获取这些文件.

try 将.js添加到扩展数组:

resolve: {
    extensions: [ '.ts', '.tsx', '.js' ]
}

这将允许webpack在@aws-sdk/client-sns秒内解决vanilla JS模块,并有望解决这个问题.

Typescript相关问答推荐

TypScript如何在 struct 上定义基元类型?

如何正确修复TypScript 4.7到4.8升级中的TS 2345编译错误

返回同时具有固定键和变量键的对象的函数的返回类型

Express Yup显示所有字段的所有错误

如何以Angular 形式显示验证错误消息

TypeScrip原始字符串没有方法

如何使默认导出与CommonJS兼容

参数属性类型定义的REACT-RUTER-DOM中的加载器属性错误

为什么在leetcode问题的测试用例中,即使我确实得到了比预期更好的解决方案,这段代码也失败了?

`fetcher.load`是否等同于Get Submit?

有没有可能创建一种类型,强制在TypeScrip中返回`tyPeof`语句?

如何使用TypeScrip在EXPO路由链路组件中使用动态路由?

TypeScrip:如何缩小具有联合类型属性的对象

两个名称不同的相同打字界面-如何使其干燥/避免重复?

为什么看起来相似的代码在打字时会产生不同的错误?

我可以将一个类型数组映射到TypeScrip中的另一个类型数组吗?

如何将对象的字符串文字属性用作同一对象中的键类型

递归JSON类型脚本不接受 node 值中的变量

元素隐式具有any类型,因为string类型的表达式不能用于索引类型{Categories: Element;管理员:元素; }'

React router - 如何处理嵌套路由?