배열에 keyof를 적용하면 'number | 배열_속성_이름_유니언 | 배열_인덱스_문자열_유니언'이 됩니다. 배열 속성 이름은 배열에 공통적으로 존재하는 length, forEach, lastIndexOf 등을 의미하고 배열 인덱스 문자열은 [1, 2, 3]의 인덱스인 '0' | '1' | '2'를 의미합니다. 재밌는 점이 있는데, ArrayKeys에 문자열 '3'은 안 되지만 숫자 3은 포함된다는 것입니다. 모든 number는 배열의 키로 허용되기 때문입니다.
튜플과 배열에도 인덱스 접근 타입을 사용할 수 있습니다.
type Arr = [1, 3, 5];
type First = Arr[0];
// type First = 1
type Length = Arr['length'];
// type Length = 3
type Arr2 = (string | boolean)[];
type El = Arr2[number];
// type El = string | boolean
배열에는 숫자 키가 허용되므로 Arr[0]과 Arr['0'] 모두 유효한 문법입니다. El 타입처럼 배열[number] 인덱스 접근 타입으로 배열 요소들의 타입을 모두 가져올 수도 있습니다.