调用location.replace的函数是否应使用never类型?
问题解决:返回never类型的函数报错处理
首先明确never类型的定义:它表示函数永远不会正常完成执行——要么抛出错误、进入无限循环,要么直接终止程序。你的代码里location.replace('/login')执行后,页面会跳转,但函数本身的执行流程并没有被强制中断,TypeScript会认为函数存在可达的结束点,因此抛出错误。
下面是两种合理的解决方案:
方案1:改用void类型(推荐,符合实际场景)
如果你的需求只是表示函数没有返回值,void是最准确的选择。因为location.replace执行后,函数会正常结束(哪怕页面跳走了,函数本身的执行流程已经完成):
function askLogin(): void { location.replace('/login'); }
方案2:确保函数无可达结束点,保留never类型
如果一定要用never类型,需要让函数彻底没有结束的可能。可以在跳转后抛出一个错误(或者添加无限循环),让TypeScript确认函数永远不会正常返回:
function askLogin(): never { location.replace('/login'); // 抛出错误,确保函数不会到达结束点 throw new Error('页面已跳转,后续代码不可达'); }
总结:如果只是普通的页面跳转逻辑,优先用void类型;只有当你需要明确标记函数“绝对不会正常返回”时,再通过添加终止逻辑来使用never。
内容的提问来源于stack exchange,提问作者tsh
相关产品推荐
相关产品推荐

