为何TypeScript会对不可达的default返回语句报错?
为什么返回false会触发类型错误?
- 你的
doSomeAction函数声明返回void,TypeScript对void的规则很明确:函数要么完全不写return语句,要么return undefined(或者return后面空着)。返回false是明确返回了一个boolean类型的值,和void的要求完全不匹配,所以必然会触发类型报错。
为什么用neverReached函数就没问题?
- 当你把
switch的所有Status分支都覆盖后,进入default分支时,status的类型会被TypeScript推断为never——因为所有可能的联合类型成员都被处理完了,理论上这个分支永远不会执行。 - 接收
never类型参数的neverReached函数,它的返回类型也是never。TypeScript里never是所有类型的子类型,自然也包括void,所以在返回void的函数里返回never类型的结果是合法的,不会触发报错。 - 更关键的是,一旦你给
Status新增了字面量但没在switch里加对应的case,此时default分支的status就不再是never了,传入neverReached函数会直接触发类型错误,正好实现了你“新增未处理分支时警告”的需求。
内容的提问来源于stack exchange,提问作者kal_stackO
相关产品推荐
相关产品推荐

