首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我是否应该将我的属性声明为“类”或“接口”?

我是否应该将我的属性声明为“类”或“接口”?
EN

Stack Overflow用户
提问于 2022-07-31 22:50:37
回答 3查看 103关注 0票数 1

我开始写成绩单。应该将类属性声明为接口类型还是特定类(实现该特定接口的类)?

代码语言:javascript
复制
    import { ITable, Table } from "aws-cdk-lib/aws-dynamodb";
    import { Construct } from "constructs";
    
    export class Database extends Construct {

       public readonly usersTable: Table; // <======== should it be Table(class) or ITable(interface)

       constructor(scope, id) {
           super(scope, id);
           this.usersTable = this.createUsersTable();
       }

       private createUsersTable(): Table { // <======== should it be Table(class) or ITable(interface)
          // some implementation
          ...
 
          return usersTable;
  
       } 
    }

什么是更好的练习?

EN

回答 3

Stack Overflow用户

发布于 2022-08-01 13:59:38

CDK中的接口用于类型检查和建筑施工。

在声明对象时,您必须问自己--这必须是一个表,还是可以是一个类似于对象的表?在这一点上,只有一个表像资源-一个表。

有些东西具有多种资源,比如IAM策略的可互换类型。但是即使如此,CDK中接受策略的代码已经接受了一个接口。

除非您正在构建您自己的自定义构造对象,否则我将不使用接口。这会造成混乱,而且在某些情况下,我认为打字本甚至不能正常工作(不能百分之百肯定,打字稿不是我的长处)。

在设计采用特定类型但可以采用该类型的任何版本的属性/参数时,最好使用接口。对于直截了当的对象声明,Type总是比一般的更准确、更具体。

票数 0
EN

Stack Overflow用户

发布于 2022-08-06 17:35:50

与具体类相比,您可能更喜欢接口,原因之一是使您的构造能够使用导入的资源,这通常会产生接口(例如fromTableArn方法)。如果您知道您或其他使用您的构造的人不会使用导入的资源,那么我想不出使用接口的好理由,因为使用接口通常会限制您对某些属性的访问。例如,Lambda的IFunction接口没有显示超时值属性,而函数有。

票数 0
EN

Stack Overflow用户

发布于 2022-08-01 07:45:55

使用接口总是更好。但是,有些函数在CDK中使用接口时不可用。我在构造、输入和公共方法上使用接口。对于私有属性/方法,默认情况下我使用接口,如果需要,我很少将它更改为具体类型。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73187452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档