Ошибка связана с тем, что в f2()
вы прямо возвращаете свой результат.
Если вы изменили f2()
на
export function f2(): Structure[] {
const returnVal = [
{
aaa: 'sdf',
ADDITIONAL_FIELD: 'asdf'
}
]
return returnVal;
}
, то не будетошибка компилятора.
TypeScript использует структурную типизацию для определения совместимости типов, поэтому в вашем коде для f1()
, result
имеет тип
{
aaa: string,
ADDITIONAL_FIELD: string
}[]
, которыйсовместим с Structure[]
(сужение типов не представляет опасности).
Я не уверен на 100%, почему прямой возврат не работает, но я предполагаю, что в f2()
вы говорите компиляторучто "этот конкретный массив имеет тип Structure[]
", и он говорит, что нет, это не так.Когда у вас есть промежуточная переменная в f1()
, вы говорите «эта функция возвращает Structure[]
», а когда вы возвращаете промежуточную переменную, компилятор проверяет и говорит «хорошо result
соответствует Structure[]
», поэтому эта функция делает то, что онаговорит.
Мне было бы интересно услышать, если бы у других было более строгое объяснение