【问题标题】:Unable to compile Typescript: property send does not exist on s3client无法编译 Typescript:s3client 上不存在属性发送
【发布时间】:2022-02-18 20:30:33
【问题描述】:

我在 typescript/nodejs 环境中使用适用于 javascript 的 AWS SDK v3,但是当我使用 ts-node 运行它时,它抱怨无法在 s3client 上找到发送函数。我的代码:

const client = new S3Client({
  credentialDefaultProvider: this.getCredentialDefaultProvider
  region: "us-west-2",
});
const command = new ListObjectsCommand({
  Bucket: bucket,
  Prefix: prefix,
});
const result = await client.send(command);

我在启动服务器时遇到的错误是:

/server/node_modules/ts-node/src/index.ts:230
  return new TSError(diagnosticText, diagnosticCodes)

TSError: ⨯ Unable to compile TypeScript:
src/controllers/aws.controller.ts(56,37): error TS2339: Property 'send' does not exist on type 'S3Client'.

这与the official documentation中的代码示例基本相同。但是我已经安装了正确的软件包(甚至清除了我的 node_modules 文件夹并重新安装了它),并且 node_modules 中的代码看起来是正确的。我做错了什么?

就上下文而言,这是在 docker-compose 容器中的 ts-node 中运行的 nodeJS 脚本。其他代码工作正常,包括使用相同客户端对象获取签名 URL 的命令。

【问题讨论】:

  • S3Client 配置没有 credentialDefaultProvider 参数。
  • @kevintechie 删除该行并不能解决编译问题。
  • 你检查过客户端变量吗? TS认为是什么?可能需要所有代码进一步调试。
  • @kevintechie 我在 TypeScript 文件中运行 npmjs.com/package/@aws-sdk/client-s3 的示例时遇到了同样的错误

标签: javascript node.js aws-sdk-js


【解决方案1】:

我们在新的 (v3.51.0) @aws-sdk\client-s3 模块中遇到了同样的错误,但在旧的 v3.47.0 中没有。 将 @aws-sdk\client-s3 模块降级到 v3.47.0,我们的后顾之忧就没有了。

【讨论】:

  • 将@aws-sdk/client-s3(在这种特殊情况下是@aws-sdk/s3-request-presigner)降级到~3.47.0解决了我们的问题。我不知道为什么它会在本地编译良好,但在使用 docker 容器运行时会抱怨,但至少服务器运行。
  • This issue 似乎可以跟踪问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-27
  • 2016-03-03
  • 2018-11-20
  • 2016-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多