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

如何实现add方法参数接口继承IUser接口的类型定义?

实现方案

要实现继承自IUser的接口来约束add方法的参数,可按以下步骤完成:

1. 定义继承自IUser的约束接口

创建一个继承IUser的接口,复用其属性类型定义:

interface IUser {
  name?: string;
  lastName?: string;
  age?: number;
  isAdmin?: boolean;
}

// 第二个接口,继承IUser,用于限定add方法的参数范围
interface IUserUpdatable extends IUser {}

2. 为User类添加完整类型约束

修改User类,给构造函数和add方法加上类型约束,通过泛型关联IUserUpdatable的键值类型:

class User {
   name: string = '';
   lastName: string = '';
   age: number = 18;
   isAdmin: boolean = false;

   // 构造函数入参用IUser约束
   constructor(props?: IUser) {
      if (props?.name) this.name = props.name;
      if (props?.lastName) this.lastName = props.lastName;
      if (props?.age) this.age = props.age;
      if (props?.isAdmin) this.isAdmin= props.isAdmin;
   }

   // 泛型约束key为IUserUpdatable的属性名,value对应属性的类型
   add<K extends keyof IUserUpdatable>(key: K, value: IUserUpdatable[K]): void {
      this[key] = value;
   }
}

3. 效果说明

  • add方法只能传入IUserUpdatable(即IUser)中定义的属性名作为key,且value的类型必须与对应属性匹配。
  • 例如调用user.add('age', '20')会触发类型错误(因为age类型为number),而user.add('name', 'Alice')则是合法操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 06:45:03