Я предлагаю создать универсальный тип для nth
и применить его к определению типа функции.Пример:
type Nth<A extends any[], I extends number> = A[I];
type R = Nth<[1, 2, 3], 1>
function nth<A extends any[], I extends number>(o: A, k: I): Nth<A, I> {
return o[k]
}
let result = nth(['a', 'b'], 1)
let result1 = nth<['a', 'b'], 1>(['a', 'b'], 1)
let result2 = nth<['a', 'b'], 1>(['a', 'b'], 1);
Детская площадка
Вы ожидаете такого поведения?
--- Отредактировано ---
ЕслиВы хотите получить «b» вместо строки, вы можете сделать что-то вроде этого:
type Nth<A extends string[], I extends number> = A[I];
let result = nth(['a', 'b'], 1) // string
let result = nth(['a', 'b'] as ['a', 'b'], 1) // string
let result1 = nth<['a', 'b'], 1>(['a', 'b'], 1) // 'b'
let result2 = nth<['a', 'b'], 1>(['a', 'b'], 1); // 'b'