То, что происходит здесь, является результатом "типизированной печати" в TypeScript. Фактически, тот факт, что возвращаемый тип в foo2 имеет поле bar
, являющееся строкой, означает, что функция имеет сигнатуру () => Promise<{foo: number, bar: string}>
, которую можно назначить переменной foo2
типа Fooer
из-за утки .
Однако в foo3 вы можете думать, что проверка типа применяется непосредственно к возвращаемому типу, а не ко всей функции. В результате вы видите ошибку Object literal may only specify known properties, and 'foo' does not exist in type 'Foo'.
, так как проверка типа выполняется над литералом объекта, который имеет дополнительное требование, что он не может указывать неизвестные свойства, когда вы даете ему явный тип.