reactjs - 如何从打字稿 useReducer 挂钩安全地断言某个状态?
问题描述
假设我们有以下状态及其减速器动作
type User = {
id: number
}
type LoginState = {
user?: User,
isLoggingIn: boolean,
isLoggedIn: boolean,
error?: Error
}
type LoginActions =
| { type: 'START_LOGGING_IN' }
| { type: 'SUCCESSFUL_LOG_IN', user: User }
| { type: 'ERROR', error: Error }
| { type: 'START_LOGGING_IN' }
如果我想从我的所有应用程序中使用这种状态,我肯定需要一些反应上下文解决方案。我不希望对这个问题使用任何外部依赖项。
然而,经过一些 fsharp 学习,这种方法导致不可能的状态成为可能。例如,isLoggedIn
如果我们在 reducer 中出错,状态可能会出错。
解决方案是使 LoginState 成为可区分的联合类型,但就我测试了 useReducer 的打字稿类型而言,强制我拥有一个类型中的所有属性,就像在示例中一样。
那么,这个问题通常是如何解决的呢?我知道我描述的示例是标准方法,但是,每当使用登录状态时,我必须在每个地方处理用户不存在的情况,这是我不想要的。我想要这个问题的最安全的解决方案,所以也不要type assertions
使用。
如果我的某些断言有误,请纠正我,我对前端的东西很困惑:S
谢谢!
解决方案
推荐阅读
- google-sheets - 将所有单元格合并为一个单元格并用逗号分隔
- c# - 使用 Caliburn.Micro 绑定时状态栏文本淡出
- mongodb - 如何将存储在嵌套字段中的纪元时间转换为日期 mongodb
- javascript - 使用导入 css 的 node_module 创建 React App
- android - 单击按钮时,我想调用 .php 文件的网址
- lotus-notes - Lotus Notes 将公式转换为代理
- javascript - ES6 导入和 node_modules 地狱
- node.js - 无法在 nodejs 中导入 @tensorflow/tfjs-node
- node.js - 自定义 HTTPS 服务器 - WebSocket 不起作用
- vue.js - [Vue 警告]:属性或方法“波士顿”未在实例上定义,但在渲染期间引用