【问题标题】:Typescript - Environment Variable "String" | Undefined Error打字稿 - 环境变量 \"String\" |未定义的错误
【发布时间】:2022-09-27 19:21:09
【问题描述】:

我通过 environment 键将环境变量从我的 lambda-stack 传递给我的 lambda 函数,但我收到一个错误。

传递变量:

environment: {
  queueArn: sqsStack.sqsQueue.queueArn,
  queueUrl: sqsStack.sqsQueue.queueUrl,
},

错误: 类型参数 \'{ MessageBody: string;队列网址:字符串 |不明确的; }\' 不可分配给 \'SendMessageRequest\' 类型的参数。

拉姆达代码:

  var params = {
    MessageBody: \"STRING_VALUE\" /* required */,
    QueueUrl: process.env.queueUrl /* required */,
  };

  sqs.sendMessage(params, function (err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else console.log(data); // successful response
  });

问题:如何使用打字稿确保process.env.queueUrl 始终是打字稿的字符串?

    标签: typescript ecmascript-6 typeguards


    【解决方案1】:

    尝试将 typescript interface 类型分配给您的对象

    var params: SendMessageRequest = {
        MessageBody: "STRING_VALUE" /* required */,
        QueueUrl: process.env.queueUrl /* required */,
    };
    

    我希望SendMessageRequest 类似于

    interface SendMessageRequest { 
        MessageBody: string; 
        QueueUrl: string; 
    }
    

    那么如果你的process.env.queueUrlundefined 那么打字稿会告诉你,如果process.env.queueUrl 有一个类型。

    如果process.env.queueUrl 有一个类型,并且它是可选的,那么您可能希望将参数创建包装在一个 if 子句中,您可以在其中测试它是否未定义。这将告诉 typescript 你不希望它是未定义的。 例如。

    if (process.env.queueUrl) {
        var params: SendMessageRequest = {
            MessageBody: "STRING_VALUE" /* required */,
            QueueUrl: process.env.queueUrl /* required */,
        };
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-30
      • 2020-11-22
      • 2017-12-22
      • 1970-01-01
      • 2020-08-15
      • 2018-04-20
      • 1970-01-01
      • 2020-03-27
      相关资源
      最近更新 更多