如何在满足条件时为TypeScript函数指定特定返回类型?
根据参数值推断函数返回类型
需求是:调用getProfile函数时,若传入isPrivate: true,编辑器需自动识别返回类型为privateProfile;传入false则识别为publicProfile。现有代码如下:
function getProfile({isPrivate: boolean}): privateProfile | publicProfile { if(isPrivate){ // 获取并返回私有资料 return fetchedPrivateProfile; } else { // 获取并返回公开资料 return fetchedPublicProfile; } }
期望调用效果:
const definitelyAPrivateProfile = getProfile({isPrivate:true}); // ^ definitelyAPrivateProfile: privateProfile
解决方案一:函数重载
通过定义函数重载签名,为不同参数组合指定明确的返回类型:
// 重载签名:分别定义两种参数对应的返回类型 function getProfile(options: { isPrivate: true }): privateProfile; function getProfile(options: { isPrivate: false }): publicProfile; // 实现签名:包含所有可能的参数和返回类型 function getProfile({ isPrivate }: { isPrivate: boolean }): privateProfile | publicProfile { if(isPrivate){ return fetchedPrivateProfile; } else { return fetchedPublicProfile; } }
调用时,TypeScript会根据传入的isPrivate布尔值,自动推断出对应的返回类型,完全匹配需求。
解决方案二:泛型+条件类型
利用泛型约束参数类型,结合条件类型让返回类型与参数值关联:
function getProfile<T extends boolean>({ isPrivate }: { isPrivate: T }): T extends true ? privateProfile : publicProfile { if(isPrivate){ // 类型断言:帮助TypeScript识别返回值符合条件类型 return fetchedPrivateProfile as T extends true ? privateProfile : publicProfile; } else { return fetchedPublicProfile as T extends true ? privateProfile : publicProfile; } }
这里的条件类型T extends true ? privateProfile : publicProfile会根据泛型T的实际值(true或false)动态确定返回类型,实现参数值到返回类型的关联推断。
内容的提问来源于stack exchange,提问作者Netharu Methmitha
相关产品推荐
相关产品推荐

