2017-12-20 260 views
5

Powiedz, że mam taki typ;użyj Częściowo w zagnieżdżonej nieruchomości z maszynopisem

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

robię stan Częściowa jak ten Partial<State>

Ale jak mogę zrobić na zagnieżdżonych właściwości częściowych, na przykład, gdybym chciał zrobić two również częściowe.

Jak to zrobić?

Odpowiedz

5

można dość łatwo zdefiniować własną RecursivePartial typ, który dołoży wszelkich właściwości, ujęte te zagnieżdżone, opcjonalnie:

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

Jeśli chcesz tylko niektóre z właściwości, aby być częściowe, to można to wykorzystać ze skrzyżowania Pick:

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

To by wszystko opcjonalnego wyjątkiem do kluczy podanych w parametrze K .

3

Jest to możliwe, można stworzyć „głęboki” typ częściowego jak następuje:

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

który może być używany jako po

const state: DeepPartial<State> = { 
    two: { 
     three: { 
      four: '4' 
     } 
    } 
}