禁用也许检查流类型

时间:2018-08-21 16:26:46

标签: flowtype

是否有一种方法可以完全全局禁用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检查。有可能还是有更好的解决方案?

0 个答案:

没有答案