如何实现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
相关产品推荐
相关产品推荐

