serendipityApe / javascriptPromotion

资深前端必备的编码问题
3 stars 0 forks source link

实现Required<T> #12

Open serendipityApe opened 2 years ago

serendipityApe commented 2 years ago

题目 implement Required

例子

与上题Partial 相反,讲所有可选属性改为必选

// all properties are optional
type Foo = {
  a?: string
  b?: number
  c?: boolean
}

const a: MyRequired<Foo> = {}
// Error

const b: MyRequired<Foo> = {
  a: 'BFE.dev'
}
// Error

const c: MyRequired<Foo> = {
  b: 123
}
// Error

const d: MyRequired<Foo> = {
  b: 123,
  c: true
}
// Error

const e: MyRequired<Foo> = {
  a: 'BFE.dev',
  b: 123,
  c: true
}
// valid

答案 type MyRequired = { //-? 将可选属性中的?移除,变为必要属性 [P in keyof T] -? : T[P]; }

补充 可能你会发现ts很多奇奇怪怪的符号,都不认识,而且百度还搜不到。写这篇博客的时候我找到了一篇总结的不错的博客,这里我就不自己总结了。 细数 TS 中那些奇怪的符号