Существует встроенный тип массива только для чтения, который делает массивы только для чтения (если только они не возвращены в простой массив).
const test: ReadonlyArray<string|number> = ['s', 1, 'o', 2];
test[1] = 0;
Но для кортежей необходимо создать явный тип, вот так:
const test: Readonly<{ 0: string, 1: number, 2: string, 3: number }> = ['s', 1, 'o', 2];
test[1] = 1;