在this example中,Flow向我们展示了一种根据类型读取属性的方法。
我已经重构它看起来像这样,它按预期工作:
type Success = { success: true, value: boolean };
type Failed = { success: false, error: string };
type Response = Success | Failed;
function handleResponse(response: Response) {
const value = response.success && response.value;
const error = !response.success && response.error;
}
但是,当common属性是一个字符串时,它在执行===
检查时有效,但如果将检查缓存到变量中则不行:
type Success2 = { success: 'success', value: boolean };
type Failed2 = { success: 'not_success', error: string };
type Response2 = Success | Failed;
function handleResponse(response: Response2) {
const isSuccess = response.success === 'success';
// const value = response.success === 'success' && response.value; // WORK
const value = isSuccess && response.value; // DOESN'T WORK
}
换句话说,在读取变量之前必须进行===
检查(字面意思),不能将它放在变量中。
这是一个已知的Flow限制,还是我错过了什么?
答案 0 :(得分:1)
isSuccess
是一个布尔值,它不知道true
暗示response.value
存在。