Programing

중첩된 속성에 형식 지정과 함께 부분 사용

c10106 2022. 3. 14. 21:06
반응형

중첩된 속성에 형식 지정과 함께 부분 사용

내가 이런 타입이 있다고 해.

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

반응형