Typescript是否考虑条件检查?

时间:2019-04-03 08:08:58

标签: typescript

我有一个奇怪的TypeScript编译警告,尽管我认为它甚至不应该存在,但我无法摆脱它。

这些是接口:

interface Props {
  tasks: TaskType[]
}

interface State {
  completed: boolean
  selectedTask?: TaskType
}

这是状态的开始-我从undefined开始,但是在代码的其他地方,可以分配类型TaskType的实际值:

class TaskBlock extends React.Component<Props, State> {

  state = {
    completed: false,
    selectedTask: undefined
  }

这是我通过render方法得到警告的地方:

const {selectedTask} = this.state
...
const isSelected = selectedTask && selectedTask.id === task.id

警告消息在这里: enter image description here

如您所见,在selectedTask.id语句之前,我正在检查selectedTask是否未定义。但是TypeScript说该对象可能是“未定义的”。没道理...

我缺少明显的东西吗?

1 个答案:

答案 0 :(得分:0)

undefined不是要分配给selectedTask的有效值。您的State界面如下

interface State {
  completed: boolean
  selectedTask?: TaskType
}

这意味着TaskType可能被分配给selectedTask,或者selectedTask可能完全丢失。但是将undefined设置为错误(除非TaskType本身为Something | undefined)。

将界面更改为selectedTask: TaskType | undefined,这样就可以使状态对象上必须存在selectedTask键,但该值也可能是undefined