首页 > 其他分享 >[Typescript] 50. Medium - RequiredByKeys

[Typescript] 50. Medium - RequiredByKeys

时间:2022-10-14 19:22:14浏览次数:59  
标签:Typescript string RequiredByKeys number 50 address type name

Implement a generic RequiredByKeys<T, K> which takes two type argument T and K.

K specify the set of properties of T that should set to be required. When K is not provided, it should make all properties required just like the normal Required<T>.

For example

interface User {
  name?: string
  age?: number
  address?: string
}

type UserRequiredName = RequiredByKeys<User, 'name'> // { name: string; age?: number; address?: string }

 

/* _____________ Your Code Here _____________ */
export type MergeObject<T> = { [P in keyof T]: T[P] };
type RequiredByKeys<T, K extends keyof T = keyof T> = MergeObject<
  Omit<T, K> & {
    [Key in keyof T as Key extends K ? Key: never]-?: T[Key]
  }
>

/* _____________ Test Cases _____________ */
import type { Equal, Expect } from '@type-challenges/utils'

interface User {
  name?: string
  age?: number
  address?: string
}

interface UserRequiredName {
  name: string
  age?: number
  address?: string
}

interface UserRequiredNameAndAge {
  name: string
  age: number
  address?: string
}

type cases = [
  Expect<Equal<RequiredByKeys<User, 'name'>, UserRequiredName>>,
  Expect<Equal<RequiredByKeys<User, 'name' | 'age'>, UserRequiredNameAndAge>>,
  Expect<Equal<RequiredByKeys<User>, Required<User>>>,
  // @ts-expect-error
  Expect<Equal<RequiredByKeys<User, 'name' | 'unknown'>, UserRequiredName>>,
]

 

标签:Typescript,string,RequiredByKeys,number,50,address,type,name
From: https://www.cnblogs.com/Answer1215/p/16792739.html

相关文章

  • [Typescript] 49. Medium - PartialByKeys
    Implementageneric PartialByKeys<T,K> whichtakestwotypeargument T and K.K specifythesetofpropertiesof T thatshouldsettobeoptional.Whe......
  • 前端Vue2-Day50
    Vue内置指令:v-bind:单向绑定解析表达式,可简写为:xxx。v-model:双向数据绑定。v-for:遍历对象、数组、字符串。v-if:条件渲染(动态控制节点是否存在)v-else:条件渲染(动态控制节......
  • VM501ML振弦读数模块
    VM501ML是稳控科技系列化振弦测读模块的小体积版本,外形尺寸不足一枚硬币大小,高集成度、高测量精度,UART和I2C数字通讯接口、频率转模拟信号输出以及智能频率获取SFC、......
  • 包装类练习——有一个字符串:“91 27 46 38 50”,请写程序实现最终输出结果是:“27 38 46
    packagepackage2;importjava.util.Arrays;//:有一个字符串:“9127463850”,//请写程序实现最终输出结果是:“2738465091"publicclassTest2{publicst......
  • AtCoder Regular Contest 150 B Make Divisible 贪心 整除分块
    给出一个A和B想要找到一个X和Y使得\(A+X|B+Y\).同时使得X+Y最小求出X+Y的最小值。值域是\([1,10^9]\)直接枚举X不太行会被某种数据卡掉。考虑正解:先固定K另\(\frac{B......
  • 《MiniPRO H750开发指南》第五十二章 FPU测试(Julia分形)实验
    第五十二章FPU测试(Julia分形)实验​本章我们将学习如何开启STM32H750的硬件FPU,并对比使用硬件FPU和不使用硬件FPU的速度差别,以体现硬件FPU的优势。​本章分为如下几个小节......
  • 《MiniPRO H750开发指南》第五十三章 DSP测试实验
    第五十三章DSP测试实验​上一章,我们测试了STM32H750的硬件FPU。STM32H750除了集成硬件FPU外,还支持多种DSP指令集。同时ST还提供了一整套DSP库方便我们工程中开发应用。​本......
  • 工作四年,分享50个让你代码更好的小建议
    前言工作四年,看过很多思考不够深入的代码,因此写一下总结吧,50个让你代码更好的小建议。其中的一些点,我以前的文章也写过啦,这次主要汇总一下。希望大家日常写代码多点思考,多点......
  • 高通骁龙SDM450平台功能介绍
    XY450安卓核心板是一款基于高通SDM450平台高性能、可运行安卓操作系统的4G智能模块,支持LTE-FDD/LTE-TDD/WCDMA/TD-SCDMA/EVDO/CDMA/GSM等多种制式;支持WiFi802.11b/g/n,BT4.0......
  • 【750】Business Email Template
    参考:150+UsefulEmailPhrasesThatWillMakeYourLifeEasierWritingbusinessemailscanbetime-consuming,butlearningsomeusefulphraseswillsaveyoulo......