@lightseeker

Почему это не работает?

function testFunction<T>(arg: number): T {
    return { testField: arg }
}

interface ITest {
    testField: number;
}

const x = testFunction<ITest>(5);


Type '{ testField: number; }' is not assignable to type 'T'.
'T' could be instantiated with an arbitrary type which could be unrelated to '{ testField: number; }'.
  • Вопрос задан
  • 43 просмотра
Пригласить эксперта
Ответы на вопрос 2
@twoone
У вас возвращаемое из функции значение принадлежит к чистому типу T у которого отсутствуют признаки типа ITest, о чем и говорит ошибка. Это вы думаете что с помощью аргументов типа конкретизировали возвращаемое функцией значение. То есть вы смотрите как-бы из вне. Но компилятору необходимо сопоставить типы внутри самой функции. Выполняя это он и обнаруживает несоответствие типа { testField: number } типу T.

Советовать что-либо сложно, поскольку в таком контексте не понятно что вы хотите добится.
Ответ написан
bingo347
@bingo347
Бородатый программер
Дженерик здесь не нужен, Ваша функция и так всегда будет возвращать ITest, ибо в TS структурная типизация.
А ругается TS, так как на T нет никакого контракта, и по сути внутри функции это равносильно unknown
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы