【问题标题】:AWS SDK with Typescript带有 Typescript 的 AWS 开发工具包
【发布时间】:2018-08-01 15:57:43
【问题描述】:

我不熟悉使用 typescript @types 文件。我已经安装了 aws-sdk 和 @types/aws-sdk。我正在尝试在 swf 中调用列表打开工作流。第一个参数是“ListOpenWorkflowExcusionsInput”,我看到类型文件声明为接口。我真的需要实现这个接口还是我遗漏了什么?

import {SWF} from "aws-sdk"
import {ListOpenWorkflowExecutionsInput} from 'aws-sdk/clients/swf'; 
let swf:SWF = new SWF();
let params:ListOpenWorkflowExecutionsInput = new ListOpenWorkflowExecutionsInputClass();

params.domain = "domain";
//etc...
swf.listOpenWorkflowExecutions(params,function(e,d){
     console.log(e);
     console.log(d);
});

然后我需要定义 ListOpenWorkflowExecutionsInputClass。

export class ListOpenWorkflowExecutionsInputClass implements ListOpenWorkflowExecutionsInput{
    domain: SWF.DomainName;
    startTimeFilter: SWF.ExecutionTimeFilter;
    typeFilter: SWF.WorkflowTypeFilter;
    tagFilter: SWF.TagFilter;
    nextPageToken: SWF.PageToken;
    maximumPageSize: SWF.PageSize;
    reverseOrder: SWF.ReverseOrder;
    executionFilter: SWF.WorkflowExecutionFilter;
}

【问题讨论】:

    标签: typescript aws-sdk-js


    【解决方案1】:

    由于 TypeScript 使用结构类型,您只需创建一个带有接口所需字段的对象字面量,并将其作为params 传递,无需创建类并实现接口。

    在您的情况下,由于您至少需要为domainstartTimeFilter 提供值,根据定义文件https://github.com/aws/aws-sdk-js/blob/master/clients/swf.d.ts,这是唯一需要的值,您可以编写:

    const params = {
        domain: ... // your value
        startTimeFilter: ... // your value 
    }
    

    这是 TypeScript 中非常常见的模式。您有定义类型的接口,并创建与这些接口相对应的对象文字并传递它们。这是因为 TypeScript 具有结构类型,即如果一个对象具有一个类型的属性,它可以分配给该类型,而无需显式实现该类型。

    【讨论】:

      猜你喜欢
      • 2016-03-24
      • 1970-01-01
      • 1970-01-01
      • 2020-04-26
      • 2020-01-26
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      相关资源
      最近更新 更多