我有一个奇怪的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说该对象可能是“未定义的”。没道理...
我缺少明显的东西吗?
答案 0 :(得分:0)
undefined
不是要分配给selectedTask
的有效值。您的State
界面如下
interface State {
completed: boolean
selectedTask?: TaskType
}
这意味着TaskType
可能被分配给selectedTask
,或者selectedTask
可能完全丢失。但是将undefined
设置为错误(除非TaskType
本身为Something | undefined
)。
将界面更改为selectedTask: TaskType | undefined
,这样就可以使状态对象上必须存在selectedTask
键,但该值也可能是undefined
。