Ответ на вопрос о синтаксисе:
Параметр типа generi c является частью сигнатуры вызова, а не частью переменной, которой вы его назначаете. Синтаксис выглядит следующим образом: <T>
перемещается после =
:
const identity = <T>(t: T): T => t;
Обратите внимание, что ваш пример кода проблематичен c. Компилятор по праву выдает ошибку, если вы исправите синтаксис:
const fnGetBodyUsingAngleBrackets = <T>(props: T): T => ({
head: 'large',
torso: 'larger',
legs: props.legs
}); // error!
// Type '{ head: string; torso: string; legs: any; }' is not assignable to type 'T'.
Это потому, что вы утверждаете, что fnGetBodyUsingAngleBrackets()
принимает аргумент любого типа T
и возвращает значение того же типа, что и аргумент , Возвращаемое значение почти наверняка не совпадает с типом аргумента:
const oops = fnGetBodyUsingAngleBrackets({ foo: "bar", baz: "qux" });
// const oops: { foo: string; baz: string; }
console.log(oops.foo.toUpperCase()); // no compiler warning; error at runtime
Я не уверен, почему именно вы хотите использовать дженерики в этом примере, поэтому я не уверен, как посоветуйте, как вам следует действовать здесь.
Хорошо, надеюсь, это поможет; удачи!
Детская площадка ссылка на код