2017-12-20 95 views
5

Giả sử tôi có loại như thế này;sử dụng một phần trong thuộc tính lồng nhau với kiểu số

interface State { 
    one: string, 
    two: { 
    three: { 
     four: string 
    }, 
    five: string 
    } 
} 

tôi làm cho nhà nước một phần như thế này Partial<State>

Nhưng làm thế nào tôi có thể thực hiện trên các thuộc tính lồng nhau một phần, ví dụ nếu tôi muốn làm two cũng một phần.

Tôi làm như thế nào?

Trả lời

5

Bạn có thể khá dễ dàng xác định riêng RecursivePartial loại của bạn, mà sẽ làm cho tất cả các tài sản, bao gồm những người lồng nhau, tùy chọn:

type RecursivePartial<T> = { 
    [P in keyof T]?: RecursivePartial<T[P]>; 
}; 

Nếu bạn chỉ muốn một số tài sản của bạn sẽ được một phần, sau đó bạn có thể sử dụng này với một ngã tư và Pick:

type PartialExcept<T, K extends keyof T> = RecursivePartial<T> & Pick<T, K>; 

Điều đó sẽ làm cho mọi thứ bắt buộc trừ cho các phím định trong tham số K .

3

này là có thể, bạn có thể tạo ra một loại 'sâu' một phần như sau:

type DeepPartial<T> = { 
    [P in keyof T]?: DeepPartial<T[P]>; 
}; 

Mà có thể được sử dụng như sau

const state: DeepPartial<State> = { 
    two: { 
     three: { 
      four: '4' 
     } 
    } 
} 
Các vấn đề liên quan