给定
const ACTION_1 = "ACTION_1";
type ACTION_1 = "ACTION_1";
const ACTION_2 = "ACTION_2";
type ACTION_2 = "ACTION_2";
type ActionTypes =
| ACTION_1
| ACTION_2
export type Reducer<S = any> = (
state: S | undefined,
action: ActionTypes
) => S
当我有此减速器时:
const reducer: Reducer<boolean> = (
state = false,
action
) => {
switch (action) {
case ACTION_1:
return true;
case ACTION_2:
return false;
default:
}
return state;
}
在严格模式下它抱怨此函数的返回类型为IState | undefined
,但是当我在switch语句中将return state;
换成default: return state
时,这很好。甚至只是一个空的default:
并将return语句留在底部将使编译器满意。
使用return类型,它甚至可以在vscode中识别出return语句不可访问。我知道它必须考虑到它,因为在运行时它不知道switch语句是否真正详尽。
但是即使我具有默认值,它也确实知道返回绝对不可到达,并且仍然抱怨此函数可能返回IState | undefined
。
甚至是错误的,因为state
参数有一个默认值。因此,它永远不会是不确定的。
这是一个错误吗?还是已知限制?
此问题在打字稿版本3.8中已修复。