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

如何通过泛型ModelHelper类初始化Blog类成员?

实现方案

需求说明

需要将Blog类的构造函数改写为调用泛型ModelHelper.initMembers方法的形式,通过该工具类统一初始化类成员,替代原有的手动赋值逻辑。

完整实现代码

interface IBlog {
  title: string;
  content: string;
}

const initialBlogConfig: IBlog = {    
  title: "",
  content: "",  
};

interface IModel {
  [key: string]: any;
}

class ModelHelper {
  static initMembers<T extends IModel, U extends IModel>(model: T, data: Partial<IModel>, initialModel: U): void {
    // 遍历初始配置的所有键,排除原型链属性
    for (const key in initialModel) {
      if (initialModel.hasOwnProperty(key)) {
        // 优先使用传入的data值,为null/undefined时回退到初始配置
        model[key] = data[key] !== null && data[key] !== undefined ? data[key] : initialModel[key];
      }
    }
  }
}

class Blog implements IBlog {
  title: string;
  content: string;

  constructor(data: Partial<IModel> = {}) {
    // 调用工具类完成成员初始化
    ModelHelper.initMembers(this, data, initialBlogConfig);
  }
}

关键修改说明

  • 泛型约束优化:给ModelHelper.initMembers的泛型T和U加上extends IModel约束,确保传入的实例和初始配置符合键值对结构,避免类型错误。
  • 循环安全处理:添加hasOwnProperty检查,避免遍历到对象原型链上的无关属性。
  • 构造函数简化:原构造函数的解构参数改为直接接收Partial<IModel>类型的data,无需手动逐个赋值,所有初始化逻辑统一由工具类处理。
  • 可扩展性提升:后续若要调整初始化规则(比如新增默认值逻辑、类型转换),只需修改ModelHelper,无需改动业务类的构造函数。

内容的提问来源于stack exchange,提问作者Murmulodi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:47:30