小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
简介
我们使用 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 const
和 keyof typeof
两个语法,这篇文章我们先来介绍一下 as const
as const
as const
被称为 const 类型断言,const 类型断言告诉编译器,要将这个表达式推断为最具体的类型,如果不使用它的话,编译器会使用默认的类型推断行为,可能会把表达式推断为更通用的类型。
注意这里 const 是类型断言,不是强制转换,在 typescript 中,const 类型断言,会从编译后的 JavaScript 中完全删除,所以使用或者不使用 as const
的应用程序,在运行时完全没有区别。
所以 as const
只是让编译器更好的了解代码的意图,让它更加精确的区分正确和错误的代码
参考:stackoverflow.com/questions/6…
以上是 as const 的全部解释内容,欢迎点赞和评论交流~