Как создать угловую скобку машинописи на жирной стрелке и сравнить ее с двоеточием? - PullRequest
0 голосов
/ 29 апреля 2020

Вот мой пример машинописи с использованием двоеточия:

interface props {
  legs: 2
};

interface body {
    head: string,
    torso: string,
    legs: number
};

const fnGetBodyUsingColon = (props: props): body => ({
  head: 'large',
  torso: 'larger',
  legs: props.legs
});

Как я могу показать пример, как указано выше, но с использованием угловых скобок дженериков?

Эта попытка дает мне ошибки:

const fnGetBodyUsingAngleBrackets<T> = (props: T): T => ({
  head: 'large',
  torso: 'larger',
  legs: props.legs
});

fnGetBodyUsingAngleBrackets, в котором отсутствует аннотация типа возврата, implicity имеет любой тип возврата

1 Ответ

1 голос
/ 29 апреля 2020

Ответ на вопрос о синтаксисе:

Параметр типа 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

Я не уверен, почему именно вы хотите использовать дженерики в этом примере, поэтому я не уверен, как посоветуйте, как вам следует действовать здесь.


Хорошо, надеюсь, это поможет; удачи!

Детская площадка ссылка на код

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...