前端 - 笔记 - 【TypeScript】 - 【typeof操作符 与 keyof操作符】

前言

  • typeofkeyof 是 TypeScript 中常见的两个操作符;
  • 注意
    • 要区分 JavaScriptTypeScript 中的 typeof

一、typeof

  • 作用

    • 用于 获取 变量 的 类型
    • 因此操作符后面跟的始终是一个变量;
  • 基本用法

    • 现在有一个变量(可以是基本数据类型,也可以是引用数据类型等等)
    ts 复制代码
    const obj = {
        a: 1,
        b: '2',
        c: [1, 2],
        d: { x: 4 },
        e: () => 'Hello TypeScript!'
    }
    
    type objType = typeof obj;
    
    // 得到的类型 objType 就是下面这样
    type objType = {
        a: number;
        b: string;
        c: number[];
        d: { x: number; };
        e: () => string;
    }
  • 使用 typeof组件添加类型

    • 我们在封装组件的时候,会给组件添加类型,此时就可以使用 typeof 操作符获取组件的类型;
    • 假如我们在 conponents 文件夹下定义了一个 CpNavBar.vue 的组件,我们如何给这个组件添加类型呢?
    • 目标文件:
      • src/types/components.d.ts
    ts 复制代码
    import CpNabBar from '@/views/components/CpNavBar.vue';
    
    declare model 'vue' {
        interface GlobalComponents {
            CpNavBar: typeof CpNavBar;
        }
    }

二、keyof

  • 作用
    • keyof 后面跟一个类型,返回 由该类型所有字段 组成的 字面量 联合 类型
    • keyof对象类型 中取出 key字面量联合类型
  • 代码展示:
    • 我们在向后端发送数据的时候需要做非空校验,有些场景下,发送数据的字段和后端返回数据的字段是一样的,字段又比较多的时候(并不是全部字段),我们可以可以使用数组的every方法做判断,但是,前提是需要准备一个相关字段的数组;
      • 声明这个数组有两种方法:
        1. 不给此数组设置类型:直接去找对应的字段,一个一个复制粘贴;
        2. 给此数组设置类型:直接用提示加回车即可快速实现;
      • 给此数组设置类型:
        • 因为发送请求的字段和后端返回数据的字段一样,我们可以直接根据返回数据的类型得到该数组的类型,此处就会使用到 keyof 关键字;
ts 复制代码
// eg: 声明的后端返回数据的类型
type GoodsInfo = {
    goods_id: string;
    goods_price: number;
    goods_count: number;
    goods_url: string[];
};

// 根据现有类型得到字段数组的类型
type GoodsKeys = keyof GoodsInfo;

// 得到的类型
// type GoodsKeys = 'goods_id' | 'goods_price' | 'goods_count' | 'goods_url';
相关推荐
gnip15 分钟前
链式调用和延迟执行
前端·javascript
SoaringHeart26 分钟前
Flutter组件封装:页面点击事件拦截
前端·flutter
杨天天.28 分钟前
小程序原生实现音频播放器,下一首上一首切换,拖动进度条等功能
前端·javascript·小程序·音视频
Dragon Wu38 分钟前
React state在setInterval里未获取最新值的问题
前端·javascript·react.js·前端框架
Jinuss38 分钟前
Vue3源码reactivity响应式篇之watch实现
前端·vue3
YU大宗师42 分钟前
React面试题
前端·javascript·react.js
木兮xg42 分钟前
react基础篇
前端·react.js·前端框架
ssshooter1 小时前
你知道怎么用 pnpm 临时给某个库打补丁吗?
前端·面试·npm
IT利刃出鞘2 小时前
HTML--最简的二级菜单页面
前端·html
yume_sibai2 小时前
HTML HTML基础(4)
前端·html