Typescript中如何实现Required<T>?

在TypeScript中,Required<T> 是一个内置的工具类型(Utility Type),用于将类型 T 中的所有可选属性转换为必需属性。

1. 示例

ts 复制代码
type Foo = {
  a?: string
  b?: number
  c?: boolean
}

// 实现效果
type MyRequired<T> = {
  [P in keyof T]-?: T[P];
}

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

在上面的示例中,关键在于使用TypeScript 2.8中引入的-删除?修饰符。

2. 拓展

  1. -修饰符
ts 复制代码
type MutableRequired<T> = { -readonly [P in keyof T]-?: T[P] }; // Remove readonly and ?

代码执行效果:

  • -readonly [P in keyof T]: 在这里,我们使用了 - 符号来表示从属性中移除修饰符。在 TypeScript 中,-readonly 表示移除只读修饰符,从而使属性变为可变(可写)。
  • -?: T[P]: 使用了 -? 语法来将原本的可选属性转换为必需属性。

通过将 -readonly 应用于属性,我们移除了只读修饰符,从而将类型 T 中的只读属性转换为可变(可写)的必需属性。

  1. +修饰符
ts 复制代码
type ReadonlyPartial<T> = { +readonly [P in keyof T]+?: T[P] }; // Add readonly and ?

代码执行效果:

  • +readonly [P in keyof T]: 在这里,我们使用了 +readonly 来添加只读修饰符。这表示我们将属性设置为只读。
  • +?: T[P]: 使用了 +? 语法来将原本的必需属性转换为可选属性。

通过将 +readonly 应用于属性,我们将类型 T 中的所有属性设置为只读属性,而通过 +? 将它们变为可选属性。

相关推荐
2501_9159184114 分钟前
Web 前端可视化开发工具对比 低代码平台、可视化搭建工具、前端可视化编辑器与在线可视化开发环境的实战分析
前端·低代码·ios·小程序·uni-app·编辑器·iphone
程序员的世界你不懂1 小时前
【Flask】测试平台开发,新增说明书编写和展示功能 第二十三篇
java·前端·数据库
索迪迈科技1 小时前
网络请求库——Axios库深度解析
前端·网络·vue.js·北京百思可瑞教育·百思可瑞教育
gnip1 小时前
JavaScript二叉树相关概念
前端
attitude.x2 小时前
PyTorch 动态图的灵活性与实用技巧
前端·人工智能·深度学习
β添砖java2 小时前
CSS3核心技术
前端·css·css3
空山新雨(大队长)2 小时前
HTML第八课:HTML4和HTML5的区别
前端·html·html5
猫头虎-前端技术3 小时前
浏览器兼容性问题全解:CSS 前缀、Grid/Flex 布局兼容方案与跨浏览器调试技巧
前端·css·node.js·bootstrap·ecmascript·css3·媒体
阿珊和她的猫3 小时前
探索 CSS 过渡:打造流畅网页交互体验
前端·css