typescript - 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 说该对象可能是“未定义的”。没有意义...
我错过了一些明显的东西吗?
解决方案
undefined
不是分配给 的有效值selectedTask
。你的State
界面如下
interface State {
completed: boolean
selectedTask?: TaskType
}
这意味着 aTaskType
可能被分配给selectedTask
,或者selectedTask
可能完全丢失。但是对它进行评估undefined
是一个错误(除非TaskType
它本身是Something | undefined
)。
将您的界面更改为selectedTask: TaskType | undefined
,这使得selectedTask
键必须存在于状态对象上,但值也可能是undefined
。
推荐阅读
- ansible - 使用带有 Ansible 的 jinja 模板陷入循环情况
- api - JMeter 测试包含 @ 作为路径参数的 url
- python - Python打印函数城市名称
- reactjs - 在表格记录中包含您的通讯日
- windows - 使用 buildmode=c-shared 为 windows/arm 和 arm64 编译 Go
- sequelize.js - 在 sequelize-typescript 中涉及另一个字段来设置功能
- r - 如何在 R Studio 中合并行的单元格内添加换行符?
- c# - 当我创建/编辑自定义组合框时,键盘的 Blinker/Caret 被禁用
- node.js - 解决递归 socket.on("data") 调用
- java - 关于命令行程序输入的问题