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

1,292 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

简介

我们使用 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 的全部解释内容,欢迎点赞和评论交流~