TypeScript : 선택적 병합 유형

Sep 12 2020

유형 a과 유형 b이 있지만 유형의 양에 관계없이 작동합니다.

type a = {
    first: number
}

type b = {
    second: string
    third: string
}

이러한 모든 유형을 선택적으로 병합하는 유형을 만들고 싶습니다. 따라서 second필드가있는 경우 third필드도 있어야 하지만 둘 다 가질 필요는 없습니다.

좋은:

const aa = {
     first: 1,
     second: "hi",
     third: "hello"
}

const ab = {
     first: 1
}

const ac = {
     second: "hi",
     third: "hello"
}

나쁜:

const bb = {
     first: 1,
     second: "hi"
}

그런 유형을 어떻게 정의 할 수 있습니까?

답변

6 Lesiak Sep 12 2020 at 05:15
type None<T> = {[K in keyof T]?: never}
type EitherOrBoth<T1, T2> = T1 & None<T2> | T2 & None<T1> | T1 & T2

type abcombined = EitherOrBoth<a,b>

자세한 예제는 다음을 참조하십시오. Typescript 인터페이스는 속성에 대한 동시 발생 제약을 표현할 수 있습니다.

놀이터 링크

KaranKumar Sep 12 2020 at 05:01

그렇게 할 수 있을지 모르겠습니다. 이것이 내가 할 일입니다.

"|"를 사용할 수 있습니다. 변수를 정의하는 동안 연산자.

type a = {
    first: number
}

type b = {
    second: string
    third: string
}

const test: a | b ={ first: 3, second: 'string'}