是否有一种方法可以完全全局禁用Maybe Check in Flow类型?假设以下简化方案在我将用户加载到Redux状态时处于null
的初始状态,但是在初始化应用程序并加载用户后始终存在。总是检查某物是否存在总是很烦人。
type User = {
name: string,
age: number,
}
type State = {
user?: User
}
在这里报告错误:
function getUser(state: State): string {
return state.user.name // <-- Flow: Cannot get `state.user.name` because property `name` is missing in undefined [1].
}
解决方案1-使用$FlowFixMe
,但它可能隐藏一些实际问题
function getUser(state: State): string {
// $FlowFixMe
return state.user.name
}
解决方案2-进行一些断言,但是太简单了,仅适用于文字检查,不适用于_.isEmpty
之类的实用程序功能
function getUser(state: State): string {
if (state.user) {
return state.user.name
} else {
return ''
}
}
解决方案3(我最喜欢)-声明存在某些属性,并在初始化中添加$FlowFixMe
而不是getter:
type User = {
name: string,
age: number,
}
type State = {
user: User
}
const initialState: State = {
// $FlowFixMe
user: null,
}
解决方案4(我最不喜欢)-声明存在某些属性,并使用一些模拟数据对其进行初始化:
type User = {
name: string,
age: number,
}
type State = {
user: User
}
const initialState: State = {
user: {
name: '',
age: 0,
},
}
但是所有四个解决方案都只是解决方法。我只想在Flow中禁用所有null检查。有可能还是有更好的解决方案?