首页 > 其他分享 >TypeScript工具类 Partial 和 Required 的详细讲解

TypeScript工具类 Partial 和 Required 的详细讲解

时间:2022-09-27 22:12:04浏览次数:61  
标签:TypeScript Partial string age Required 接口 name

场景描述:

场景描述:一个接口(IPerson)有很多个的字段,可能有几百。而且这些字段都是必须的。
我们需要使用这个接口,但是我又不可能使用它的全部。可能只会使用几个。
我还必须要使用这接口。这个时候,我们怎么解决这个问题呢?
TS给了我们一个工具类Partial,可以解决这隔办法
Partial  [ pɑ rʃl ] [部分的]
使用的方式就是 let obj:Partial<接口名>={  }

工具类的使用 Partial

// 这个接口有这些的字段
interface IPerson {
    name: string;
    age: number;
    sex: "男" | "女"; //只能够是男或者女,
    address: string,
    xueli: string,
    like: string[],
    height: string,
    weight:number,
    // 可能这个接口还有很多字段
 }

// 现在我要使用IPerson这个接口去声明name, age, sex。
// 我们就可以使用工具类 Partial。Partial表示我只使用接口中的部分声明
let zhang: Partial<IPerson> = {
    name: '张三',
    age: 10,
    sex: '女'
}

Partial 是怎么做的

我们将光标放在 Partial 上可以看见这样的描述
type Partial<T> = { [P in keyof T]?: T[P] | undefined; }
什么意思呢? 我们知道<T>是一个接口。 
[P in keyof T] 中的T其实就是 IPerson 这个接口
简单点就是翻译成了下面这样的样子
{
    name ?: string | undefined,
    age ?: number | undefined
    sex ?:  "男" | "女" | undefined
   这样的形式下去
}
通过 Partial 【怕 show儿】声明后就不会报错。达到使用接口的部分声明

场景描述

interface IInfoPerson {
    name: string;
    age: number;
    address?: string,
    like?: string[],
}
我们之前声明了一个接口。其中有几个字段是可选的(address,like )。
现在我们恰好需要使用这个接口,不过有几个的可选字段要变为必须字段。
我们怎么解决这个问题呢?
1.重新声明一个接口。可以解决,但是这样不好。
2.不用管它。我们心里在使用的时候知道这几个可选的字段是必须字段
3.使用 Required 读音[rɪ ˈkwaɪ ə d ] 

工具类 Required的简单使用

// 有两个可选字段
interface IInfoPerson {
    name: string;
    age: number;
    address?: string,
    like?: string[],
}

// 通过 Required 将可选字段变为必须字段
let lisi: Required<IInfoPerson> = {
    name: '李四',
    age: 10,
    address: '在罗翔老师的视频中',
    like:['吃饭','睡觉']
}

// 通过 Required 将可选字段变为必须字段 【这个会报错】
let zhang: Required<IInfoPerson> = {
    name: '张三',
    age: 10,
}

Required是怎么做的?

光标放在 Required 上会出现下面的提示内容
type Required<T> = { [P in keyof T]-?: T[P]; }
这里的 -? 就是抵消掉问号 ?
这就变成了 
{
    name: string;
    age: number;
    address: string,
    like: string[],
}
这样就不可以缺省了

标签:TypeScript,Partial,string,age,Required,接口,name
From: https://www.cnblogs.com/IwishIcould/p/16736196.html

相关文章

  • django项目 models新增class :TypeError: __init__() missing 1 required positional a
    File"D:\boke\boo\models.py",line22,inUserInfoblog=models.OneToOneField(to="Blog",to_field="nid",null=True)TypeError:__init__()missing1require......
  • TypeScript extends
    ......
  • [Typescript] 38. Medium - Diff
    Getan Object thatisthedifferencebetween O & O1/*_____________YourCodeHere_____________*/typeDiff<T,S>={[KinExclude<(keyofT|keyof......
  • 二、typescript类(二)构造函数、继承
    constructor构造函数:会在对象创建时调用,可以自定义对象的值1classDog{2name:string;3age:number;4bark(){5alert("汪!");6console.......
  • 二、typescript类(三)抽象类
    abstract开头的类是抽象类:抽象类和其他类区别不大,只是不能用来创建对象 抽象类,就是被继承的类抽象类,可以添加抽象方法,抽象方法只能添加在抽象类中;1abstractclass......
  • TypeScript:声明文件
    声明文档的作用当使用第三方库时,我们需要引用它的声明文件,才能获得对应的代码补全、接口提示等功能。假如我们想使用第三方库jQuery,一种常见的方式是在html中通过<sc......
  • TypeScript:泛型
    什么是泛型泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性。1函数泛型//<T>表示定义模板类型,(arg:T):T表示......
  • TypeScript:类的类型变量
    classPerson{//脱衣服privatedisrobe(){//.....}//穿衣服privatedress(){//.....}//洗操publictak......
  • TypeScript:函数
    接口中使用函数接口可以描述函数类型;为了使用接口表示函数类型,我们需要给接口定义一个调用签名。它就像是一个只有参数列表和返回值类型的函数定义。参数列表里面的每个参......
  • TypeScript:类
    一、概念简单认知类是现实世界或思维世界中的实体在计算机中的反映,它将数据(属性)以及这些数据上的操作(方法)封装在一起。对象是具有类类型的变量。类和对象是面向对象......