반응형
Typescript 3.0에서 Tuple을 다른 Tuple 유형으로 '매핑'하는 방법
의 태플을 가지고 있습니다.Maybe유형:
class Maybe<T>{ }
type MaybeTuple = [Maybe<string>, Maybe<number>, Maybe<boolean>];
그리고 저는 이것을 여러 가지 유형으로 바꾸고 싶습니다.
type TupleIWant = [string, number, boolean];
그래서 저는 이것을 시도했습니다:
type ExtractTypes<T> = T extends Maybe<infer MaybeTypes>[] ? MaybeTypes : never;
type TypesArray = ExtractTypes<MaybeTuple>; // string | number | boolean NOT [string, number, boolean]
효과가 없는 것 :-(
알겠습니다(string | number | boolean)[]내가 원하는 튜플보다는:[string, number, boolean]
제가 하고 싶은 일이 현재 가능한가요?
TypeScript 3.1에서 지원되는 매핑된 튜플 유형을 사용해야 합니다.
속성이 있는 매핑된 유형을 만들 수 있습니다.0,1,2그리고.length다음과 같은 올바른 유형:
class Maybe<T> {}
type MaybeTuple = [Maybe<string>, Maybe<number>, Maybe<boolean>];
type MaybeType<T> = T extends Maybe<infer MaybeType> ? MaybeType : never;
type MaybeTypes<Tuple extends [...any[]]> = {
[Index in keyof Tuple]: MaybeType<Tuple[Index]>;
} & {length: Tuple['length']};
let extractedTypes: MaybeTypes<MaybeTuple> = ['hello', 3, true];
이전 버전의 유형 스크립트를 사용하는 경우 TypeScript의 릴리스되지 않은 버전을 사용하거나 해결 방법으로 조건부 유형을 작성하여 튜플과 일치시킬 수 있습니다. 예를 들어, 이렇게 할 수 있습니다.
배열의 비인덱스 키를 제외해야 합니다. 그렇지 않으면 다음을 매핑할 수도 있습니다.push,length기타:
type NumStrDate = [number, string, Date]
type IdxOf<T extends any[]> = Exclude<keyof T, keyof any[]>
type OrUndef<T extends any[]> = {[K in IdxOf<T>]: T[K] | undefined}
type MaybeNSD = OrUndef<NumStrDate>
const fine: MaybeNSD = [5, 'foo', undefined]
const problem: MaybeNSD = ['foo', undefined, undefined]
위에 마우스를 올려놓으면MaybeNSD해결된 의미가 표시됩니다.
type MaybeNSD = {
0: number | undefined;
1: string | undefined;
2: Date | undefined;
}
언급URL : https://stackoverflow.com/questions/51672504/how-to-map-a-tuple-to-another-tuple-type-in-typescript-3-0
반응형
'programing' 카테고리의 다른 글
| 문자열을 변수 이름으로 변환 (0) | 2023.07.11 |
|---|---|
| 속성이 'IntrinsicAttributes & {children?' 유형에 없습니다.ReactNode; }' (0) | 2023.07.11 |
| Python 문자열이 [u'String']으로 인쇄됨 (0) | 2023.07.11 |
| C와 C++ # include 디렉티브에서 백슬래시를 사용할 수 있습니까? (0) | 2023.07.06 |
| Android: 버튼 또는 이미지 버튼의 텍스트와 이미지 결합 (0) | 2023.07.06 |