typescript - TypeScript:如何将类型属性转换为类成员
问题描述
我得到了这种类型:
type User = {
name: string;
email: string;
password: string;
}
另一方面,我得到了可以扩展并传递一些字段的抽象类。如果我想将 User 属性作为此类中的字段,我需要传递每个单独的字段,如下所示:
abstract class UserModel {
name: User['name'];
email: User['email'];
password: User['password'];
}
鉴于我必须重复我在其他地方拥有的所有信息,这当然非常不方便。
有没有办法使用某些特定的语法自动执行此操作?
解决方案
你确定你想要一个抽象类吗?
解决方案一:没有抽象类
interface User {
name: string;
email: string;
password: string;
}
class Bob implements User {
email = 'bob@bobson.com';
name = 'Bob';
password = 'bobson666';
}
解决方案二:使用抽象类
您可以使用接口来定义您的属性并实现它旁边的类:
interface UserModel {
name: string;
email: string;
password: string;
}
abstract class UserModel {
name = 'Bob'; // Correct
name = 42; // Error: Subsequent property declarations must have the same type. Property 'name' must be of type 'string', but here has type 'number'.(2717)
}
在同一范围内拥有class
and 和 andinterface
会使 TypeScript 合并它们的定义,因此您无需重复自己,同时在分配属性时仍保持类型安全。
推荐阅读
- javascript - 选择 on-change 以在另一个选择中填充特定选项不适用于 safari
- c - 从 txt 文件中选择特定部分并放入链表
- matlab - 将 .txt 文件中的数据导入 Matlab
- ruby-on-rails - 监视相同命名空间的类
- css - 当使用 vp 设置 img 的高度时,它会影响兄弟元素的宽度,但使用 % 则不会,为什么?
- cgal - 在 CGAL 2D 周期性 Delaunay 三角剖分中移动顶点的问题
- javascript - 如何确保 Meteor js 后端的繁重任务被执行?
- ios - UINavigationController 与子视图控制器的奇怪行为
- android - 添加 Android Room 库(jcenter 给出 404 错误)
- javascript - 猫鼬独特的不工作