Implement a generic IsRequiredKey<T, K>
that return whether K
are required keys of T
.
For example
type A = IsRequiredKey<{ a: number, b?: string },'a'> // true
type B = IsRequiredKey<{ a: number, b?: string },'b'> // false
type C = IsRequiredKey<{ a: number, b?: string },'b' | 'a'> // false
/* _____________ Your Code Here _____________ */
type Equal<T, U> = (<P>(x: P) => T extends P ? 1 : 2) extends (<P>(x: P) => U extends P ? 1 : 2) ? true: false;
type RequiredKeys<T> = keyof {
[Key in keyof T as T[Key] extends Required<T>[Key] ? Key: never]: T[Key]
}
type IsRequiredKey<T, K extends keyof T> = Equal<K,RequiredKeys<T>> extends true ? true : false;
/* _____________ Test Cases _____________ */
import type { Expect } from '@type-challenges/utils'
type cases = [
Expect<Equal<IsRequiredKey<{ a: number; b?: string }, 'a'>, true>>,
Expect<Equal<IsRequiredKey<{ a: number; b?: string }, 'b'>, false>>,
Expect<Equal<IsRequiredKey<{ a: number; b?: string }, 'b' | 'a'>, false>>,
]
标签:Typescript,false,true,extends,IsRequiredKey,Key,type,118 From: https://www.cnblogs.com/Answer1215/p/16927666.html