TypeScript小应用中基于UserProfile接口创建对象的技术咨询
实现基于TypeScript接口的对象创建函数(UserProfile示例)
看起来你正在用TypeScript开发一个小型应用,核心是通过接口约束并生成特定类型的对象,目前已经在user-profile.ts里定义了UserProfile只读接口,还有一个没写完的fulfill函数对吧?我帮你把这段代码规范格式化,再补全两种常见的实现思路~
首先是你给出的基础代码(已格式化):
// user-profile.ts export interface UserProfile { readonly titel_id: number; readonly user_name: string; readonly email: string; readonly first_name: string; readonly last_name: string; readonly phone: string; readonly fax: string; }
两种常见的fulfill函数实现方案
方案1:补全部分属性,生成完整的只读对象
如果你的fulfill是想接收部分用户信息,自动补全缺失的属性(比如设置默认值),然后返回一个符合UserProfile类型的完整只读对象,可以这么写:
export function fulfill(partialProfile: Partial<UserProfile>): UserProfile { // 根据业务需求设置合理的默认值 const defaultProfile: UserProfile = { titel_id: 0, user_name: 'anonymous_user', email: 'placeholder@example.com', first_name: 'Unknown', last_name: 'Unknown', phone: '', fax: '' }; // 合并传入的部分属性和默认值,并用Object.freeze确保对象只读 return Object.freeze({ ...defaultProfile, ...partialProfile }) as UserProfile; }
方案2:验证输入并返回合规的只读对象
如果你的fulfill是用来校验传入的对象是否完全符合UserProfile类型,同时确保返回的对象不可修改,可以这么实现:
export function fulfill(profile: UserProfile): UserProfile { // 这里可以添加自定义校验逻辑,比如检查邮箱格式、手机号规则等 if (!profile.email.includes('@')) { throw new Error('Invalid email address: missing "@" symbol'); } if (profile.phone && !/^\d{3}-\d{3}-\d{4}$/.test(profile.phone)) { throw new Error('Phone number must follow format: XXX-XXX-XXXX'); } // 冻结对象,确保属性无法被修改 return Object.freeze(profile); }
使用示例
// 方案1的使用方式:传入部分属性,得到完整对象 const user1 = fulfill({ user_name: 'johndoe_123', email: 'john.doe@example.com', first_name: 'John', last_name: 'Doe' }); console.log(user1.titel_id); // 输出默认值0 // user1.user_name = 'newname'; // 报错:无法分配到"user_name",因为它是只读属性 // 方案2的使用方式:传入完整对象,经过校验后返回 const user2: UserProfile = { titel_id: 5, user_name: 'janedoe_456', email: 'jane.doe@example.com', first_name: 'Jane', last_name: 'Doe', phone: '123-456-7890', fax: '987-654-3210' }; const verifiedUser = fulfill(user2);
内容的提问来源于stack exchange,提问作者user1592129
相关产品推荐
相关产品推荐

