实现 Optional

作者:xie392地址:https://v.douyin.com/ieQ7ytem/更新时间:2024-12-21

案例代码

1
interface Article {
2
title: string
3
content: string
4
author: string
5
date: Date
6
}
7
8
// 看下面 Omit 、Partial 、Pick 的例子
9
type Optional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>
10
11
type CreateArticleOptions = Optional<Article, 'author' | 'date'>
12
13
function createArticle(options: CreateArticleOptions) { }
14
15
createArticle({title: '11', content: ''})
16
17
18
/**
19
* =============================================================================================
20
* 下面分别是 Omit 、Partial 、Pick 的例子
21
* =============================================================================================
22
*/
23
interface Todo {
24
title: string
25
description: string
26
completed: boolean
27
}
28
29
/**
30
* Omit
31
* 移除某些属性,新类型中不能有这些属性
32
*/
33
// 移除两个属性 'description' | 'completed'
34
type TodoOmit = Omit<Todo, 'description' | 'completed'>
35
36
const todo: TodoOmit = {
37
title: '1'
38
}
39
40
/**
41
* Pick
42
* 挑选某些属性,新类型中必须要拥有这些属性
43
*/
44
// 挑选两个属性 'title' | 'description'
45
type TodoPick = Pick<Todo,'title' | 'description'>
46
47
const todo2: TodoPick = {
48
title: '1',
49
description: ''
50
}
51
52
/**
53
* Partial
54
* 部分属性类型,新类型中变为可选
55
*/
56
// 全部类型变为可选
57
type TodoPartial = Partial<Todo>
58
59
const todo3: TodoPartial = {}