阅读 215

Typescript 对象所有 values 组成的 type - as const

简介

我们使用 typescript 开发时,常会遇到 的问题,类似于需要一个 valueof 的函数,但是 typescript 里没有直接提供这样的函数,那么我们应该怎么实现呢?

参考自:stackoverflow.com/questions/4…

系列文章

Typescript 对象所有 values 组成的 type - as const

例子

import { useSelector } from 'react-redux'; import { RootState } from 'reducer'; export const PERMISSIONS = {     PERMISSION_A: 'permission_a',     PERMISSION_B: 'permission_b', } as const; type TPermissions = typeof PERMISSIONS[keyof typeof PERMISSIONS]; export const usePermissions = (curPermission: TPermissions) => {     const permissions = useSelector(state => (state as RootState).user.permissions);     return permissions.indexOf(curPermission) > -1; }; 复制代码

分析

主要使用了 as constkeyof typeof 两个语法,这篇文章我们先来介绍一下 as const

as const

as const 被称为 const 类型断言,const 类型断言告诉编译器,要将这个表达式推断为最具体的类型,如果不使用它的话,编译器会使用默认的类型推断行为,可能会把表达式推断为更通用的类型。

注意这里 const 是类型断言,不是强制转换,在 typescript 中,const 类型断言,会从编译后的 JavaScript 中完全删除,所以使用或者不使用 as const 的应用程序,在运行时完全没有区别。

所以 as const 只是让编译器更好的了解代码的意图,让它更加精确的区分正确和错误的代码

参考:stackoverflow.com/questions/6…

以上是 as const 的全部解释内容,欢迎点赞和评论交流~


作者:恒十七
链接:https://juejin.cn/post/7022870194682855454


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐