首页 > 解决方案 > 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

警告信息在这里: 在此处输入图像描述

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

我错过了一些明显的东西吗?

标签: typescript

解决方案


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

interface State {
  completed: boolean
  selectedTask?: TaskType
}

这意味着 aTaskType可能被分配给selectedTask,或者selectedTask可能完全丢失。但是对它进行评估undefined是一个错误(除非TaskType它本身是Something | undefined)。

将您的界面更改为selectedTask: TaskType | undefined,这使得selectedTask键必须存在于状态对象上,但值也可能是undefined


推荐阅读