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 中的所有属性设置为只读属性,而通过 +? 将它们变为可选属性。

相关推荐
qq_120840937113 分钟前
Three.js 工程向:相机控制与交互手感调优(OrbitControls)
前端·javascript·orbitcontrols
疯狂的魔鬼13 分钟前
从 5 个 Hooks 到注册表模式:Vue 3 复杂详情页的架构演进与原则沉淀
前端·架构
enoughisenough17 分钟前
WEB网络通信
前端
We་ct36 分钟前
LeetCode 300. 最长递增子序列:两种解法从入门到优化
开发语言·前端·javascript·算法·leetcode·typescript
深海鱼在掘金37 分钟前
Next.js从入门到实战保姆级教程(第一章):导读——建立 Next.js 的认知框架
前端·typescript·next.js
渔舟小调38 分钟前
P17 | 管理台动态路由:后端返回菜单树,前端运行时注入
前端
小徐_23331 小时前
uni-app 组件库 Wot UI 2.0 发布了,我们带来了这些改变!
前端·微信小程序·uni-app
❀͜͡傀儡师1 小时前
Claude Code 官方弃用 npm 安装方式:原因分析与完整迁移指南
前端·npm·node.js·claude code
知识分享小能手1 小时前
ECharts入门学习教程,从入门到精通,ECharts高级功能(6)
前端·学习·echarts
阿祖zu1 小时前
OpenClaw 入门到放弃:私人 AI 的初代原型机
前端·后端·aigc