generated at
配列をunion型に変換する
[number] で添字する

ts
type Tuple = ['a', 'b', 'c', 'd']; type A = Tuple[number]; // 'a'|'b'|'c'|'d'


index signatureを使っている
ArrayやTupleは実際はobject型として定義されているので、実体は以下のような型
1.ts
type Tuple = { [x: number]: "a" | "b" | "c" | "d"; 0: "a"; 1: "b"; 2: "c"; 3: "d"; length: 4; toString: () => string; toLocaleString: () => string; pop: () => "a" | "b" | "c" | "d" | undefined; push: (...items: ("a" | "b" | "c" | "d")[]) => number; ... 29 more ...; at: (index: number) => "a" | ... 3 more ... | undefined; }
これは type B = { [K in keyof Tuple]: Tuple[K] }; のように定義してVSCodeとかでhoverすれば見れるmrsekut
ここで、 1.ts の1行目に、 [x: number]: .. と書かれている
index signatureによって、 hoge[number] でアクセスできる
だから、
ts
type Tuple = { [x: number]: 'a' | 'b' | 'c' | 'd'; // ここから下はあまり関係ない 0: 'a'; 1: 'b'; 2: 'c'; 3: 'd'; length: 4; }; type A = Tuple[number]; // 'a' | 'b' | 'c' | 'd';
こんな感じになる
docsの関連しそうな箇所 ref


Mapped Tuple Typeとは関係ないのか #??