TypeScript - массив с фиксированной длиной <length> тип?

Рискуя продемонстрировать отсутствие знаний о типах TypeScript, у меня возникает следующий вопрос.

Когда вы создаете объявление типа для такого массива...

position: Array<number>;

... он позволит вам создать массив с произвольной длиной. Однако, если вам нужен массив, содержащий числа с определенной длиной, т.е. 3 для компонентов x, y, z, вы можете создать тип для массива с фиксированной длиной, что-то вроде этого?

position: Array<3>

Любая помощь или разъяснение оценены!

Ответ 1

В массиве javascript есть конструктор, который принимает длину массива:

let arr = new Array<number>(3);
console.log(arr); // [undefined × 3]

Однако это только начальный размер, нет никаких ограничений на его изменение:

arr.push(5);
console.log(arr); // [undefined × 3, 5]

Typcript имеет типы кортежей, которые позволяют определить массив с определенной длиной и типами:

let arr: [number, number, number];

arr = [1, 2, 3]; // ok
arr = [1, 2]; // Type '[number, number]' is not assignable to type '[number, number, number]'
arr = [1, 2, "3"]; // Type '[number, number, string]' is not assignable to type '[number, number, number]'