1.基础
关于typescript
类型编程的基础看看官网的介绍基本上就够了,这里就不赘述了,主要是记录下个人学习的一些东西,实现的思路。
2.IsOption
实现可以判断某个键值是否可选
type IsOptional<O, K extends keyof O> = Partial<Pick<O, K>> extends Pick<O, K> ? true: false
type test = {
a?: string
b: number
}
type res = IsOptional<test, 'a'> // true
3.思路
3.1如果用js实现,将会是这样
const obj = {
key1: 'optional',
key2: 'require'
}
function isOptional(obj, key) {
return obj[key] === 'optional'
}
isOptional(obj, 'key1')
关键的一步就是obj[key] === 'optional'
,想办法判断目标和“可选标记”是否相等
3.2获取目标我们可以用自带的Pick
type test = {
a?: string
b: number
}
type target = Pick<test, 'a'>
3.3获取了目标我们需要做比较,那么和什么东西作比较呢?
我们无法获知属性上的“可选标记”,但是我们可以把目标和另一个长得和目标一样的类型(只不过属性是可选的)作对比
type test = {
a?: string
b: number
}
type target = Pick<test, 'a'>
// 构造可选
type other = Partial<Pick<test, 'a'>>
// 对比
type isOptional = target extends other ? true : false