reactjs - 如何在打字稿类型定义中使用常量?
问题描述
我的应用程序中有一个文件,其中包含一个名为 ui-constants.ts 的常量列表
内容如下:
export const NO_STATUS = 'NOSTATUS';
export const DRAFT_STATUS = 'DRAFT';
export const AWAITING_TRIAGE_STATUS = 'AWAITINGTRIAGE'
export const COMPLETE_NOT_REQUIRED_STATUS = 'COMPLETENOTREQUIRED';
export const UNASSIGNED_STATUS = 'UNASSIGNED';
在我的 reactjs 应用程序的其他地方,我有一个文件,我尝试在其中使用它:
import * as UI_CONSTANTS from '../constants/ui-constants';
type RequestStatus =
| 'NOSTATUS'
| 'DRAFT'
| 'AWAITINGTRIAGE'
| 'COMPLETENOTREQUIRED'
| 'UNASSIGNED';
现在,问题是我拿起的应用程序有点乱,在某些地方使用常量,在其他地方使用类型。我想做的是使用类型中的常量,即
type RequestStatus = UI_CONSTANTS.NO_STATUS | UI_CONSTANTS.DRAFT_STATUS | UI_CONSTANTS .AWAITING_TRIAGE_STATUS | UI_CONSTANTS.COMPLETE_NOT_REQUIRED_STATUS
这样做会导致以下错误:
ui-constants"' 没有导出成员 'NO_STATUS'.ts(2694)
这种情况的背景是,我有一个开发人员不满意在源代码中使用字面值应该是常量,而其他人则认为应该使用类型。
我正在研究是否可以通过定义常量和在哪里使用类型来实现两全其美,将这些常量指定为这些类型的值。
这是可以实现的还是我做错了?
解决方案
试试这个:
import * as UI_CONSTANTS from '../constants/ui-constants';
type RequestStatus = typeof UI_CONSTANTS[keyof typeof UI_CONSTANTS]
const a: RequestStatus = 'NOSTATUS' // OK
const b: RequestStatus = 'DRAFT' // OK
const c: RequestStatus = 'TEST' // Error
推荐阅读
- swift - 用于多条件快速查找的数据结构
- java - 实施社会安全号码的安全方法
- android - 使用 Android Webview,如何将 MediaPlayer 的控制权传递给 Activity
- r - R scales::label_format 在转换为字符之前将我的数字转换为浮点数
- python - 如何将 3d 数组展平为 1d 数组
- python - 用于插值图像的快速 numpy 索引
- openstack - 如何在 Openstack 中使用分子
- codeception - 如何从命令行将环境变量传递给 Codeception YML 文件?
- python - AttributeError:模块“statsmodels”没有属性“数据集”
- python - 创建分组比例向量而不丢失行