NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
>[success] # Required -- 所有属性变为必填 ~~~ 1.将所有属性变为必填 2.+ -这两个关键字用于映射类型中给属性添加修饰符,比如-?就代表将可选属性变为必选 ~~~ >[danger] ##### 源码 ~~~ type Required<T> = { [P in keyof T]-?: T[P]; }; ~~~ >[danger] ##### 使用 ~~~ type Person = { name: string age?: number } const person: Required<Person> = { name: 'w', // age: 1, 报错此时必填 } ~~~ >[danger] ##### 自定义深层必填校验 ~~~ // 上面的Required 只能校验一层,像深层次的可以使用自定义如下方法 type DeepRequired<T> = { [P in keyof T]-?: T[P] extends object ? DeepRequired<T[P]> : T[P] } ~~~ ~~~ type Person = { name: string age?: number contact: { email?: string } } const person: DeepRequired<Person> = { name: 'w', age: 1, contact: { // email: '111', 不写报错 }, } ~~~