Для начала нужно утвердить правила и семантику для кортежей. В typescript это понятие довольно размыто. Ну то есть можно делать так:
const tuple = [1, ‘hello’]
или
const tuple: [i32, string] = [1, ‘foo’]
но они можут модифичироваться напримр:
function foo(tuple: [i32, string]): [i32, string] {
tuple[0] = 2;
tuple[1] = ‘baz’;
return tuple;
}
Поэтому скорее всего будет нужно делать только так:
const tuple = [1, ‘hello’] as const;
function foo(tuple: readonly [i32, string]): readonly [i32, string] {
}
Что конечно добавляет вербозности, но зато гарантирует неизменяемость и возможность передачи by value