Как работает объявление литерала объекта в функции стрелки Typescript? - PullRequest
0 голосов
/ 25 января 2020

Я довольно часто сталкивался со следующей идиомой Typescript в приложении.

interface something {
    comment: string;
}

const f = <something>({ data: result }) => result.comment;

console.log(f({ data: { comment: "Hi Mom"} }));

, которая выдает «Hi Mom» на консоли, как и ожидалось.

У меня есть два базовых c вопроса:

  • По сути, это, кажется, говорит: «Возьмите значение любого поля данных объекта, который я передаю вам, назовите его result и приведите его как something ", но я не понимаю, как это достигается. Как правильно связать result при вызове функции?
  • Во-вторых, tslint жалуется, что something является скрытым именем. Насколько я понимаю, это типизация, и я не понимаю, как типизация вообще определяет имя, не говоря уже о том, которое скрыто.

Может ли кто-нибудь просветить меня?

1 Ответ

1 голос
/ 25 января 2020

Возьмите значение любого поля данных объекта, который я передаю, которое вы передаете, назовите его результатом

Верно, оно называется деструктурирующим назначением .

и разыграть его как нечто

Видимо, в этом примере это просто ошибка, он ничего не делает там. Они называются Generi c types . Я могу только сказать, что пример должен выглядеть так, поэтому он правильно использует дженерики:

interface something {
  data: {
    comment: string;
  }
}

const f = <T extends something>({ data: result }: T) => result.comment;

console.log(f({ data: { comment: "Hi Mom"} }));

tslint жалуется, что что-то является скрытым именем

Это Правильно, потому что something определен как интерфейс и как обобщенный тип c, поэтому tslist жалуется

Надеюсь, это было понятно:)

...