반응형
중첩된 속성에 형식 지정과 함께 부분 사용
내가 이런 타입이 있다고 해.
interface State {
one: string,
two: {
three: {
four: string
},
five: string
}
}
나는 이런 상태를 부분적 상태로 만든다.Partial<State>
그러나 예를 들어, 예를 들어, 중첩된 속성을 부분적인 것으로 어떻게 만들 수 있는가?two
또한 부분적인
내가 어떻게 이럴까?
당신은 당신 자신의 것을 쉽게 정의할 수 있다.RecursivePartial
모든 속성을 만드는 유형, 포함된 중첩 속성, 선택 사항:
type RecursivePartial<T> = {
[P in keyof T]?: RecursivePartial<T[P]>;
};
일부 속성만 부분화하려면 이 속성을 교차점과 함께 사용하십시오.Pick
:
type PartialExcept<T, K extends keyof T> = RecursivePartial<T> & Pick<T, K>;
그렇게 되면 에 명시된 키를 제외한 모든 것이 선택적으로 될 것이다.K
매개 변수
다음과 같이 '딥' 부분 유형을 생성할 수 있다.
type DeepPartial<T> = {
[P in keyof T]?: DeepPartial<T[P]>;
};
다음과 같이 사용할 수 있는 것
const state: DeepPartial<State> = {
two: {
three: {
four: '4'
}
}
}
개체의 배열 속성
TypeScript 2.8 이상의 경우 다음 유형으로 어레이 속성에 대한 문제를 해결해야 한다.
type NestedPartial<T> = {
[K in keyof T]?: T[K] extends Array<infer R> ? Array<NestedPartial<R>> : NestedPartial<T[K]>
};
아래 예제를 참조하십시오.
interface Foo {
NumProp: number;
SubItem: Foo;
SubItemArray: Foo[];
}
조건부 유형이 있는 유효한 결과
잘못된 결과
https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html
중첩된 속성을 제외하여 다시 부분:
interface Foo {
someName: Partial<Omit<MainType, 'lvl2Partial'> & { lvl2Partial: Partial<SubType> }>
}
아마도 기본 타입으로 재귀하는 것을 원하지 않을 때 유용할 것이다.
type RecursivePartial<T> = {
[P in keyof T]?: typeof T[P] extends Record<string, unknown> ? RecursivePartial<T[P]> : T[P];
};
참조URL: https://stackoverflow.com/questions/47914536/use-partial-in-nested-property-with-typescript
반응형
'Programing' 카테고리의 다른 글
사전을 복사하고 사본만 편집하는 방법 (0) | 2022.03.15 |
---|---|
RxJS 6 페이지가 활성화되지 않은 경우 일시 중지 또는 버퍼 관찰 가능 (0) | 2022.03.14 |
GetDerivedStateFromProps를 사용하여 초기화한 후 소품을 상태로 전환하시겠습니까? (0) | 2022.03.14 |
파이톤 대본에 #!(쉐뱅)을 넣어야 하나, 어떤 형식을 취해야 하나? (0) | 2022.03.14 |
빈 집합 리터럴? (0) | 2022.03.14 |