typescript 实现Optional

2023-12-14 23:13:08

我们先看下面的这段代码,一个学生接口,里面有成员id,name,age,gender等等成员,
有一个方法graduate,里面要接受一个Student类型的实参

	interface Student {
	  id: number
	  name: string
	  age: number
	  gender: string
	}
	function graduate(Student: Student) {
	  //...
	}

现在有一个问题,就是学生毕业,可以只需要学生的id其他的都是可选的,
那直接使用Student接口作为实参的约束显然行不通

这时候我们就需要改造一个能使用的来,如下

	interface Student {
	  id: number
	  name: string
	  age: number
	  gender: string
	}
	interface StudentOptional {
	  id: number
	  name?: string
	  age?: number
	  gender?: string
	}
	
	function graduate(Student: Student) {
	  //...
	}

这样改完,错误就很明显了,代码冗余太多了,如果只是一个类还好,但是实际开发中往往是一个很大的类,所以这种程度的代码冗余是无法接受的

所以我们需要一种更简单的修改,让StudentOptional 就来自于Student,只不过里面的属性约束是可选的
Partial可以实现一部分要求,但是使用Partial之后,StudentOptional 中所有的成员就都是可选的了
在这里插入图片描述
但是使用Partial后.,所有约束成员都是可选的了,不符合我们最初的想法,因为id是必须的
而且很遗憾,ts并没有内置这种工具类
所以我们得自己写

	type Optional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>

在这里插入图片描述

我先不解释为什么这样能实现需求,评论区有知道为什么的吗?

文章来源:https://blog.csdn.net/weixin_44368963/article/details/135003965
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。