유형 간 선택 생성에 대한 질문에 따라 인터페이스에서 인덱스 유형 선택 정의
이제 일련의 요소를 만들어야 합니다. 일반적으로 다음과 같이 작성할 수 있습니다 element1 & element2
. 그러나 XSD 스키마를 변환하는 중이므로 새로운 TypeScript 개발자가 무엇과 혼동하지 않도록 1:1 일치를 원합니다. 진행되고있다.
현재 나는이 유형이 있습니다
type Object_Type<T> = { [P in keyof T]: T[P] };
type Sequence<A, B = {}, C = {}, D = {}, E = {}, F = {}, G = {}, H = {}, I = {}, J = {}, K = {}, L = {}, M = {}, N = {}> =
Object_Type<A>
& Object_Type<B>
& Object_Type<C>
& Object_Type<D>
& Object_Type<E>
& Object_Type<F>
& Object_Type<G>
& Object_Type<H>
& Object_Type<I>
& Object_Type<J>
& Object_Type<K>
& Object_Type<L>
& Object_Type<M>
& Object_Type<N>;
그리고 이렇게 사용할 수 있습니다
const sequence: Sequence<{name: string}, {age: number}> = {
name: "John",
age: 999
};
그러나 모든 단일 일반 매개 변수를 수동으로 정의하고 기본값을 제공하는 것은 매우 극단적이므로 이렇게 정의할 수 있는지 궁금합니다.
type Sequence<...T> = Object_Type<...T>;
TypeScript 에는 명시적 가변 유형 이 없으므로 정확한 공식 Sequence<...T>
이 작동하지 않습니다. 그러나 에서와 같이 대신 튜플 유형을 사용할 수 있습니다 Sequence<[{name: string}, {age: number}]>
. 주어진 튜플 유형을 사용 하여 매핑 할 수 있으며 해당 속성 Object_Type
을 조회 하여 튜플을 공용체 로 변환number
한 다음 공용체를 교집합으로 변환합니다 .
type Object_Type<T> = { [P in keyof T]: T[P] };
type UnionToIntersection<U> =
(U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
type Sequence<T extends any[]> =
UnionToIntersection<{ [K in keyof T]: Object_Type<T[K]> }[number]>;
const sequence: Sequence<[{ name: string }, { age: number }]> = {
name: "John",
age: 999
};
다른 경우가 있을 수 있지만(예: 개인 A
, B
, 등 유형 자체가 공용체인 경우) 작동합니다. 이것들은 망치질 수 있지만... 여기 사용 사례를 이해하지 못하는 것 같습니다. Object_Type
대부분은 작동하지 않습니다. 그래서 당신은 그것으로 무엇을 하고 있습니까? 당신이 얻을 수없는 표현 Sequence<A,B,C>
(또는 Sequence<[A,B,C]>
내 버전에서)으로 A & B & C
무엇을 얻 습니까? 자세히 설명하면 하려는 작업에 더 쉽고 더 나은 솔루션이 있을 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다