reactjs - 找不到 TypeScript 常量字符串
问题描述
我试图定义一个字符串常量而不是多次定义它,我的代码如下;
interface RefreshReviewerBenchAction { type: 'REFRESH_REVIEWER_BENCH_COMPONENT' }
我很困惑为什么这不是“字符串”类型,而不是看起来是一个常量字符串。我尝试像这样定义这个常量字符串;
export const REFRESH_REVIEWER_BENCH_COMPONENT = 'REFRESH_REVIEWER_BENCH_COMPONENT';
interface RefreshReviewerBenchAction { type: REFRESH_REVIEWER_BENCH_COMPONENT }
但是我收到一条错误消息,指出“找不到REFRESH_REVIEWER_BENCH_COMPONENT”。我认为找不到它,因为我在需要类型的地方使用了常量字符串。所以问题是字符串和'REFRESH_REVIEWER_BENCH_COMPONENT'有什么区别?以及如何使 'REFRESH_REVIEWER_BENCH_COMPONENT' 成为字符串类型,这样我就不必在整个代码中使用看起来是常量字符串的东西?
解决方案
没错,问题与值和类型之间的差异有关。给定名称可以独立定义为值、类型或两者。(类似的字符串文字'REFRESH_REVIEWER_BENCH_COMPONENT'
可以用作值或类型。)使用typeof
关键字获取常量的类型REFRESH_REVIEWER_BENCH_COMPONENT
:
export const REFRESH_REVIEWER_BENCH_COMPONENT = 'REFRESH_REVIEWER_BENCH_COMPONENT';
interface RefreshReviewerBenchAction { type: typeof REFRESH_REVIEWER_BENCH_COMPONENT }
如果您希望能够REFRESH_REVIEWER_BENCH_COMPONENT
直接用作类型,那么您可以定义一个类型别名:
export const REFRESH_REVIEWER_BENCH_COMPONENT = 'REFRESH_REVIEWER_BENCH_COMPONENT';
type REFRESH_REVIEWER_BENCH_COMPONENT = typeof REFRESH_REVIEWER_BENCH_COMPONENT;
interface RefreshReviewerBenchAction { type: REFRESH_REVIEWER_BENCH_COMPONENT }
推荐阅读
- javascript - discord info 命令无法读取未定义的属性 x
- javascript - 我无法弄清楚为什么我第一次单击项目时会出现预期的行为,但是当我再次这样做时会出现意外的行为
- c - 使用互斥锁锁定对列表对象的所有访问
- python - 如何在python(生成器表达式)中将字符串转换为嵌套字典?
- apache-kafka - 从 Kafka Consumer 内部,如何获取消息头
- reactjs - 在下一个 JS 中使用动态路由时获取客户端的 cookie
- php - 为什么 php artisan serve 不断尝试重命名我的 .env 文件?
- antd - 有没有办法在 Ant Design Form 中触发 Form.Item 上的 ValuesChange 或 Change 事件
- c# - 对接口使用约束泛型
- firebase - Firebase 未正确初始化