You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:52:14