🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
>[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', 不写报错 }, } ~~~