配列をunion型に変換する
[number]
で添字する
例
tstype Tuple = ['a', 'b', 'c', 'd'];
type A = Tuple[number]; // 'a'|'b'|'c'|'d'
ArrayやTupleは実際はobject型として定義されているので、実体は以下のような型
1.tstype 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すれば見れる

ここで、 1.ts
の1行目に、 [x: number]: ..
と書かれている
だから、
tstype 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';
こんな感じになる