guqzhou guqzhou
首页
快捷导航
  • Html 篇
  • Javascript 基础篇
  • 框架

    • Vue2
  • 前端文章

    • Css 篇
    • 微信开发
    • JavaScript
    • Vue
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《TypeScript 从零实现 axios》
    • 小程序笔记
    • JavaScript 基础
  • nginx
  • CSS
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 面试题库

    • HTML
    • CSS
    • jQuery
    • Vue
    • 零碎
  • 面试心得

    • 杂言碎语
  • 摘抄收录

    • ☆ 励志鸡汤
    • ❀ 人间烟火
    • ☣ 万物沦丧
    • ✌ 关掉烦恼
    • ✲ 小酒馆
  • 读书笔记

    • 《小狗钱钱》
    • 《穷爸爸富爸爸》
    • 《聪明人使用方格笔记本》
关于
  • 学习
  • 面试
  • 心情杂货
  • 友情链接
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue资源
  • 主站CDN (opens new window)
  • Vercel (opens new window)
  • Netlify (opens new window)
  • Github (opens new window)
GitHub (opens new window)

guqzhou

喜欢所以去追求!
首页
快捷导航
  • Html 篇
  • Javascript 基础篇
  • 框架

    • Vue2
  • 前端文章

    • Css 篇
    • 微信开发
    • JavaScript
    • Vue
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《TypeScript 从零实现 axios》
    • 小程序笔记
    • JavaScript 基础
  • nginx
  • CSS
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 面试题库

    • HTML
    • CSS
    • jQuery
    • Vue
    • 零碎
  • 面试心得

    • 杂言碎语
  • 摘抄收录

    • ☆ 励志鸡汤
    • ❀ 人间烟火
    • ☣ 万物沦丧
    • ✌ 关掉烦恼
    • ✲ 小酒馆
  • 读书笔记

    • 《小狗钱钱》
    • 《穷爸爸富爸爸》
    • 《聪明人使用方格笔记本》
关于
  • 学习
  • 面试
  • 心情杂货
  • 友情链接
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue资源
  • 主站CDN (opens new window)
  • Vercel (opens new window)
  • Netlify (opens new window)
  • Github (opens new window)
GitHub (opens new window)
  • vue2
  • CSS

  • Javascript基础

  • javascript进阶

  • typeScipt

    • ts入门
    • ts接口和对象类型
    • 泛型
    • 枚举
    • 类型推论、类型别名
    • 映射类型
    • never
    • typeScipt教程文档
    • 联合类型、交叉类型
    • class类
    • 泛型高级用法
    • 面向对象
    • typescript用localStorage封装过期时间
    • 泛型工具
      • 泛型工具
        • Partial
        • Required
        • pick
        • Exclude
        • Omit
    • 类型声明文件
  • vue2

  • vue3

  • react

  • vite介绍

  • vue实战

  • pinia的使用

  • gis

  • 前端文章

  • JavaScript文章

  • Vue文章

  • 小程序开发文章

  • uni-app

  • 学习笔记

  • TaroUI的使用

  • 工具使用

  • 前端
  • typeScipt
guqzhou
2024-03-18
0

泛型工具

# 泛型工具

# Partial

是一个泛型类型,用于将一个类型的所有属性变为可选。

interface  User {
    name: String
    age: String
}

type PartialUsre  = Partial<User>

// 实现原理
type customPartial<T> = {
    [P in keyof T] : T[P]
}
1
2
3
4
5
6
7
8
9
10
11

# Required

是一个泛型类型,用于将一个类型的所有属性变为必选。

interface User {
    name: String
    age: String
}

type RequiredUser = Required<User>

// 实现原理
type customRequired<T> = {
    [P in keyof T]-?: T[P]
}

type RequiredUser = customRequired<User>
1
2
3
4
5
6
7
8
9
10
11
12
13

# pick

用于从一个类型中选取指定的属性。

interface User {
    name: String
    age: String
}

type pickUser = Pick<User, 'name'>

// 实现原理
type customPick<T, K extends keyof T> = {
    [P in K]: T[P]
}


1
2
3
4
5
6
7
8
9
10
11
12
13

# Exclude

用于从一个类型的属性集合中排除指定的属性。 原理:为什么要搞never? 因为never在联合类型中会被忽略

interface User {
    name: String
    age: String
}
type ExcludeUsre = Exclude<'A' | 'B' | 'C', 'A' | 'B'>

// 实现原理
type CustomUsre<T,K> = T extends K ? never : T
1
2
3
4
5
6
7
8

# Omit

用于创建一个新类型,该新类型从原始类型中排除指定的属性。

interface User {
    name: String
    age: String
}
type  OmitUsre = Omit<User, 'age'>

type customOmit<T, K> = Pick<T, Exclude<keyof T, K>>

1
2
3
4
5
6
7
8
上次更新: 2024/04/26, 0:04:00
typescript用localStorage封装过期时间
类型声明文件

← typescript用localStorage封装过期时间 类型声明文件 →

最近更新
01
常用IP工具
02-05
02
GitHub 自动化部署
02-04
03
vue3-3新特性
02-04
更多文章>
Theme by Vdoing | Copyright © 2021-2026 guqzhou | 萌ICP备20238188号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式