Angular 构造角度接口文件和用户定义类型保护的约定
我在Angular 2项目中使用接口,并创建了用户定义的类型保护: 网格元数据.ts grid.service.ts 存储(即在文件结构中)接口的约定是什么;例如,它们应该在自己的文件中还是在Angular 构造角度接口文件和用户定义类型保护的约定,angular,typescript,conventions,convention,file-structure,Angular,Typescript,Conventions,Convention,File Structure,我在Angular 2项目中使用接口,并创建了用户定义的类型保护: 网格元数据.ts grid.service.ts 存储(即在文件结构中)接口的约定是什么;例如,它们应该在自己的文件中还是在接口或util目录或文件中 存储共享用户定义类型保护的约定是什么?将接口和UDTG放在同一个文件中(因为它们是相关的)或者将所有UDTG放在一个共享模块中有意义吗 在构建我的项目时,我找不到任何关于最佳实践或普遍接受的惯例的可靠例子 如果我能很好地理解的话,角度就是把每件事都放在正确的位置上 这就是为什么我
接口
或util
目录或文件中
存储共享用户定义类型保护的约定是什么?将接口和UDTG放在同一个文件中(因为它们是相关的)或者将所有UDTG放在一个共享模块中有意义吗
在构建我的项目时,我找不到任何关于最佳实践或普遍接受的惯例的可靠例子 如果我能很好地理解的话,角度就是把每件事都放在正确的位置上 这就是为什么我们有这样的结构:
- +使用者
- user.ts
- user-profile.ts
- user-dashboard.component.ts
- user-dashboard.component.html
- users.service.ts
- users.module.ts
可以是user.ts
用户界面
可以是user profile.ts
实现的类
用户界面
可以是用户的仪表板组件。可能扩展user dashboard.component.ts
类的UserProfile
类
这就是我如何看待一些OOP项目的结构,以及我如何解释Angular的开发人员希望它成为的样子。如果我理解得很好,Angular就是要把每件事情都安排在正确的位置上 这就是为什么我们有这样的结构:
- +使用者
- user.ts
- user-profile.ts
- user-dashboard.component.ts
- user-dashboard.component.html
- users.service.ts
- users.module.ts
可以是user.ts
用户界面
可以是user profile.ts
实现的类
用户界面
可以是用户的仪表板组件。可能扩展user dashboard.component.ts
类的UserProfile
类
这就是我所看到的一些OOP项目的结构,以及我如何解释Angular的开发人员希望它成为的样子。我认为目标是将每个项目都放在单独的容器/文件/块/文件夹中。所以,在你的界面上有一个文件。实现该接口的类的文件。扩展该类的文件(例如),等等。我认为这是相当主观的。我经常看到有人说,一致性比你如何命名或把它放在哪里(合理的范围内)更重要。我认为目标是将每个东西都放在单独的容器/文件/块/文件夹中。所以,在你的界面上有一个文件。实现该接口的类的文件。扩展该类的文件(例如),等等。我认为这是相当主观的。我经常看到人们说,一致性比你如何命名或把它放在哪里(在合理的范围内)更重要。
export interface GridMetadata {
activity: string;
createdAt: object;
totalReps: number;
updatedAt: object;
}
...
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;
}
...