前端 - 笔记 - 【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';
相关推荐
yinuo2 小时前
前端跨页面通讯终极指南⑥:SharedWorker 用法全解析
前端
PineappleCoder6 小时前
还在重复下载资源?HTTP 缓存让二次访问 “零请求”,用户体验翻倍
前端·性能优化
拉不动的猪6 小时前
webpack编译中为什么不建议load替换ast中节点删除consolg.log
前端·javascript·webpack
李姆斯6 小时前
Agent时代下,ToB前端的UI和交互会往哪走?
前端·agent·交互设计
源码获取_wx:Fegn08957 小时前
基于springboot + vue健身房管理系统
java·开发语言·前端·vue.js·spring boot·后端·spring
闲谈共视7 小时前
基于去中心化社交与AI智能服务的Web钱包商业开发的可行性
前端·人工智能·去中心化·区块链
CreasyChan7 小时前
C# 反射详解
开发语言·前端·windows·unity·c#·游戏开发
JIngJaneIL8 小时前
基于Java+ vue智慧医药系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
+VX:Fegn08958 小时前
计算机毕业设计|基于springboot + vue图书管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
hashiqimiya9 小时前
两个步骤,打包war,tomcat使用war包
java·服务器·前端