构造角度接口文件和用户定义类型防护的公约

时间:2017-05-22 12:56:14

标签: angular typescript conventions convention file-structure

我在Angular 2项目中使用Interfaces,并且还创建了User Defined Type Guards:

网格metadata.ts

export interface GridMetadata {
  activity: string;
  createdAt: object;
  totalReps: number;
  updatedAt: object;
}

grid.service.ts

...
    function isGridMetadata(obj: any): obj is GridMetadata {
      [ 'activity', 'createdAt', 'totalReps', 'updatedAt' ].every((prop) => {
        if (obj.hasOwnProperty(prop) === false) return false;
      });

      return typeof obj.activity === 'string' &&
        obj.createdAt.hasOwnProperty('.sv') &&
        obj.createdAt['.sv'] === 'timestamp' &&
        typeof obj.totalReps === 'number' &&
        obj.updatedAt.hasOwnProperty('.sv') &&
        obj.updatedAt['.sv'] === 'timestamp' ?
          true :
          false;
    }
...

存储(即在文件结构中)接口的约定是什么;它们应该在自己的文件中,还是在interfaceutil目录或文件中?例如?

存储共享用户定义类型防护的惯例是什么?将Interface和UDTG放在同一个文件中(因为它们是相关的)还是将所有UDTG放在共享模块中是否有意义?

在构建项目时,我找不到关于最佳实践或普遍接受的约定的任何可靠示例。

1 个答案:

答案 0 :(得分:1)

如果我理解的话,Angular就是把每一件东西都放在正确的位置。

这就是为什么我们有这样的结构:

  • +用户
    • user.ts
    • 用户profile.ts
    • 用户dashboard.component.ts
    • 用户dashboard.component.html
    • users.service.ts
    • users.module.ts

+用户将成为用户的文件夹。

  • user.ts可以是UserInterface,也就是说。
  • user-profile.ts可以是Class工具UserInterface
  • user-dashboard.component.ts可以是用户的信息中心组件。 Class可能会扩展UserProfile类。

等等......

我是如何看待一些OOP项目的结构,以及我如何解释Angular的开发者想要它。