Typescript在调用
fail
时拒绝缩小,但在调用fail2
时会缩小。这是Typescript的一个错误吗?const fail = (message?: string): never => {
throw new Error(message);
};
function fail2(message?: string): never {
throw new Error(message);
}
const getData = (): string | null => {
return "the-data";
}
export const loadDataOrError = (): string => {
const data = getData();
if (data === null) {
// Swap the below and see that it works
// fail2();
fail();
}
// This errors
return data;
};
这里是一个游乐场,如果你想尝试切换注释并看到错误消失。
fail
可以被重新赋值,新的值仍然会返回never
,所以这不是一个好的理由。在您的示例中,您使用了设计上不合理的as
,因此显然会导致奇怪的行为。 - Guillaume Brunerie