仲灏小栈 仲灏小栈
首页
大前端
后端&运维
其他技术
生活
关于我
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

仲灏

诚意, 正心, 格物, 致知
首页
大前端
后端&运维
其他技术
生活
关于我
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 《前端项目基础建设》
  • HTML&CSS

  • JavaScript&TypeScript

    • typescript 万金油
    • 缓缓滚动到顶部实现方式
    • js 精准和模糊获取dom
    • iframe 笔记
    • 文件上传安全问题
    • 时间处理
    • Web H5 接入海康录像机 (rtsp转flv)
    • 全局数据
    • 持久化数据
    • typescript 类型库
    • type
    • 前端开发这些年碰到不常见的api(不论新旧 持续更新)
    • js api常用详解
    • 搭建typescript环境刷LeetCode算法
    • typescript 类型联动
      • 前端避免一直try...catch...(ts装饰器)
      • 高效操作DOM
      • 用好DOM事件
      • 理解 AST 实现和编译原理
      • 常用正则
      • js面试技能拼图 this
      • for...in for...of 区别
      • js 获取元素大小
    • Node

    • 构建

    • Vue

    • React

    • 小程序

    • 跨端

    • Electron

    • WebGL&GIS

    • 浏览器

    • 面经

    • 其他

    • 大前端
    • JavaScript&TypeScript
    仲灏
    2022-08-04
    目录

    typescript 类型联动

    enum MyEnum { A, B, C };
    
    1

    如果我想要另一种类型,即该枚举的键的联合字符串,我可以执行以下操作:

    type MyEnumKeysAsStrings = keyof typeof MyEnum;  // "A" | "B" | "C"
    
    1
    type Person = { age: number; name: string; alive: boolean };
     
    type I2 = Person[keyof Person];
    //type I2 = string | number | boolean
    
    1
    2
    3
    4
    const RestfulMethod = {
      get: 'GET',
      post: 'POST',
      put: 'PUT',
      delete: 'DELETE'
    } as const
    
    
    type IRestfulMethod = typeof RestfulMethod
    type TypeRestfulMethod = IRestfulMethod[keyof IRestfulMethod]
    // type TypeRestfulMethod = 'GET' | 'POST' | 'PUT' | 'DELETE'
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    type Person = { age: number; name: string; alive: boolean };
     
    type I2 = keyof Person
    //type I2 = 'age' | 'name' | 'alive'
    
    1
    2
    3
    4
    let obj = {
      name: 'hello',
      age: 18, 
      eat () {
        return 'food'
      },
      link () {
        return 'dog'
      }
    }
    
    type methodsPick<T> = {[K in keyof T]: T[K] extends Function ? K : never}[keyof T];
    // T1 = 'eat' | 'link'
    type T1 = methodsPick<typeof obj>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    # Partial

    # pick

    通过从 Type 中选择一组属性 Keys(字符串文字或字符串文字的联合)来构造一个类型。

    interface Todo {
      title: string;
      description: string;
      completed: boolean;
    }
     
    type TodoPreview = Pick<Todo, "title" | "completed">;
     
    const todo: TodoPreview = {
      title: "Clean room",
      completed: false,
    };
    
    todo;
     
    const todo: TodoPreview
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    # omit

    与pick相反,通过从 Type 中选择所有属性然后删除 Keys(字符串文字或字符串文字的联合)来构造一个类型。

    interface Todo {
      title: string;
      description: string;
      completed: boolean;
      createdAt: number;
    }
     
    type TodoPreview = Omit<Todo, "description">;
     
    const todo: TodoPreview = {
      title: "Clean room",
      completed: false,
      createdAt: 1615544252770,
    };
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    上次更新: 2023/06/10, 12:06:41
    搭建typescript环境刷LeetCode算法
    前端避免一直try...catch...(ts装饰器)

    ← 搭建typescript环境刷LeetCode算法 前端避免一直try...catch...(ts装饰器)→

    最近更新
    01
    vim日常使用记录
    04-02
    02
    滑动窗口最大值
    04-02
    03
    有效的字母异位词
    04-02
    更多文章>
    Theme by Vdoing | Copyright © 2021-2025 izhaong | github | 蜀ICP备2021031194号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式