附加属性的Typescript装饰器或继承

时间:2018-09-21 05:02:02

标签: angular typescript typescript2.0

说我目前有以下模型结构,

class Entity {
   id : string;
}

class HateoasEntity extends Entity{
   _links : any;
   _msgs : any;
}

class EditableEntity extends HateoasEntity{
   _new : boolean;
   _editInProgress : boolean
}

class Employee extends EditableEntity{
    name : string;
    address : string;
}

为此,我可以创建自定义的打字稿装饰器来添加那些没有继承的元数据吗?

@Entity
@HateoasEntity
@EditableEntity
class Employee{
  name : string;
  address: string;
}

与装饰器搭配使用是一种好方法吗?还是我要实现的是不良设计?

1 个答案:

答案 0 :(得分:0)

您可以通过将必需的字段添加到类原型中,使用打字机装饰器来存档所需的行为。但是,您将失去TypeScript的主要好处-输入信息。

看看Intersection types

interface EntityFields {
   id : string;
}

interface HateoasFields {
   _links : any;
   _msgs : any;
}

interface EditableFields {
   _new : boolean;
   _editInProgress : boolean
}

interface EmployeeFields {
    name : string;
    address : string;
}

type Employee = EntityFields & HateoasFields & EditableFields & EmployeeFields

这样,您仍然可以输入信息,并且可以轻松地在其他地方重复使用字段。