[Typescript] 118. Hard - IsRequiredKey

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>>,
]

 

posted @   Zhentiw  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
历史上的今天:
2020-11-26 [RxJS] Filtering operator: first
2020-11-26 [Tools] Interactively exploring a large JSON file with fx
2020-11-26 [Javascript] Broadcaster + Operator + Listener pattern -- 22. mapError, wrap fetch with broadcaster with cancellation
2020-11-26 [Javascript] Cancel a promise
2020-11-26 [Tools] Uncaught ReferenceError: regeneratorRuntime is not defined
2019-11-26 [ML] Tensorflow.js + Image segmentPerson
2019-11-26 [Javascript] Generators & Iterable Objects
点击右上角即可分享
微信分享提示