如何用TypeScript类型守卫缩小函数返回类型?
TypeScript 能否通过类型守卫关联函数返回类型?
目前TypeScript没有原生支持你期望的这种直接关联两个函数的类型守卫写法(即function isRed(thing: string): getColor(thing) is 'red'这类语法)。
TypeScript的类型守卫机制核心是收窄参数自身的类型,无论是typeof、instanceof这类内置守卫,还是自定义类型守卫,都是围绕当前函数的参数类型进行缩小,无法直接将一个函数的判断结果,关联到另一个函数的返回类型上。
回到你的示例:
// 原判断函数 function isRed(thing: string): boolean { // 返回判断thing是否为红色的逻辑 } // 原颜色获取函数 function getColor(thing: string): 'red' | 'blue' { // 返回标识thing颜色的结果 } // 仅接受'red'的函数 function paintWithRed(color: 'red'): void { /* ... */ } // 存在类型错误的调用 function main() { if(isRed('tomato')) { paintWithRed(getColor('tomato')); // 编译器无法识别此时getColor必然返回'red' } }
你期望的那种直接关联isRed和getColor的写法,目前不在TypeScript的原生特性范围内。如果要实现类似的类型安全,只能通过重构类型结构(比如将thing和对应的颜色封装为带类型的对象)等替代方案,但这不属于你问的原生支持方式。
内容的提问来源于stack exchange,提问作者marikaner
相关产品推荐
相关产品推荐

