如何在Dart中从实现的接口中忽略(Omit)属性?
Dart 中实现类似 TypeScript Omit 的属性排除方案
Dart 本身没有像 TypeScript 那样内置的 Omit 类型工具,但针对你需要排除 Users 类的 id 属性用于数据库插入的场景,有几种实用的解决方式:
创建专用数据类
最直接的方式是定义一个不含id的类,专门用于数据库插入操作,还可以方便地从原Users实例转换:class UserForInsert { String username; String password; UserForInsert({required this.username, required this.password}); // 从 Users 实例快速转换 UserForInsert.fromUser(Users user) : username = user.username, password = user.password; }插入数据库时直接使用
UserForInsert的实例,完全避开id属性。通过 Map 移除属性
如果不想新增类,可以把Users实例转为 Map 后移除id键:// 假设已有 Users 实例 Users targetUser = Users(id: 1, username: 'foo', password: 'bar'); // 方式1:手动构建不含id的Map Map<String, dynamic> insertData = { 'username': targetUser.username, 'password': targetUser.password, }; // 方式2:利用toJson方法(先给Users类实现toJson) Map<String, dynamic> userMap = targetUser.toJson(); userMap.remove('id');对应的
Users类toJson实现:abstract class Users { int id; String username; String password; Users({required this.id, required this.username, required this.password}); Map<String, dynamic> toJson() { return { 'id': id, 'username': username, 'password': password, }; } }代码生成(进阶方案)
若项目中频繁需要这类属性排除操作,可以借助代码生成工具(如freezed)来简化,但会增加项目复杂度,更适合大型项目场景。
内容的提问来源于stack exchange,提问作者fredtma
相关产品推荐
相关产品推荐

