Почему функция не определена после правильной передачи интерфейса? - PullRequest
0 голосов
/ 26 апреля 2020

Я новичок в Typescript. Например, из книги Фрэнка Заметти

interface IPerson {
  firstName: string;
  getGreeting(lastName:string) : string
};

const person = {
    firstName : "Frank",
    getGreeting(lastName: string) {
      return `Hello, ${this.firstName} ${lastName}`;
    }
};

function greet(person: IPerson) {
    (person.getGreeting("Zammetti"));
  }

console.log(greet(person));

Сначала я бегу

tsc -t ES2017 p2.ts

, а затем

node p2.js

undefined

Почему? Я просто избавляюсь от тревоги

function greet(person: IPerson) {
  alert(person.getGreeting("Zammetti"));
}

Что означает предупреждение?

Ответы [ 2 ]

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

imo, если это ваш реальный код, о котором вы забыли return в реализации greet:

function greet(person: IPerson) {
  return (person.getGreeting("Zammetti"));
}

, так что, в основном, если функция ничего не возвращает на самом деле в мире javascript, она возвращает undefined, и именно поэтому вызов console.log(greet(...)) действовал таким образом

и отвечал на ваш второй вопрос:

alert работал по той же причине, что console.log не был

alert является частью Web API https://developer.mozilla.org/en-US/docs/Web/API/Window/alert (одна из самых ранних вещей в этом языке, я считаю, поэтому он настолько прост и существует в глобальном масштабе)

0 голосов
/ 26 апреля 2020

Вы не указываете тип персоны IPersion и не возвращаете ничего из метода объекта person, поэтому возвращается undefined.

interface IPerson {
  firstName: string;
  getGreeting(lastName:string) : string
};

const person:IPerson = {
    firstName : "Frank",
    getGreeting(lastName: string) {
      return `Hello, ${this.firstName} ${lastName}`;
    }
};

function greet(person: IPerson) {
    return person.getGreeting("Zammetti");
}

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