Ваша проблема в том, что B extends Kingdom[Category]["body"]
не означает , что означает B
Kingdom[Category]["body"]
, вместо этого это означает, что B
должно быть присваиваемым на Kingdom[Category]["body"]
.
Итак, как указал @Aluan, тип , такой как {legs: number, eyes: 2}
, вполне подходит для B
. {legs: number, eyes: 2}
распространяется Kingdom[Category]["body"]
. Это означает, что { legs: 4 }
, объект, который вы возвращаете, не может быть достаточно. Было бы идеально, если бы B
было точно Kingdom[Category]["body"]
, но это не всегда так.
В вашей ситуации нет необходимости в обобщенном c. Действительно, использовать его неправильно, потому что вам нужно ровно Kingdom[Category]["body"]
:
function GetBody<
Category extends keyof Kingdom,
>(cat: Category): Kingdom[Category]["body"] {
return { legs: 4 };
}
ACHTUNG : интерфейс TS уже называется Body
. Измени свое имя.