> For the complete documentation index, see [llms.txt](https://mm.ricky.moe/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mm.ricky.moe/javascript/typescript/shi-yong/deeppartial.md).

# DeepPartial

`Partial`,它的作用是将属性全部变为可选.

```javascript
type Partial<T> = { [P in keyof T]?: T[P] };
```

但是`Partial`无法把深层属性变成可选,只能处理外层属性。

想处理深层属性,就必须用到类型递归:

```javascript
type DeepPartial<T> = {
    [U in keyof T]?: T[U] extends object
    ? DeepPartial<T[U]>
    : T[U]
};

type R2 = DeepPartial<Person>
```
