Функция определена, но MyFunction не является функцией - PullRequest
0 голосов
/ 31 октября 2018

Person - это объект со свойствами firstName и lastName. У меня есть служба, которая возвращает Person. Чтобы смоделировать Person в Typescript, я создал следующий класс Person.ts:

export class Person {

    firstName?: string;
    lastName?: string;

    get fullName(): string() {
        return `${firstName} ${lastName}`;
    }

}

Я могу получить массив Person со следующим кодом:

this.persons: Array<Person> = this.httpClient.get<Array<Person>>('http://url.of.my.service');

Для каждого Person в this.persons я могу получить его имя и фамилию, но я получаю следующую ошибку, если пытаюсь получить его полное имя: person.fullName is not a function. Что это значит?

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Есть две проблемы с вашим кодом.

Очевидным является то, что fullName - это не функция, это свойство, поэтому к нему следует обращаться person.fullName, а не person.fullName()

Вторая проблема состоит в том, что this.httpClient.get<Array<Person>>('http://url.of.my.service'); не будет возвращать экземпляры Person, он будет возвращать объекты, которые могут иметь поля Person, но не будет экземплярами Person, и поэтому свойство fullName не будет существует, как вы определили его для объектов, возвращаемых этим вызовом. (Также предполагаю, что он не возвращает массив напрямую, выглядит как служба Angular, возвращающая Observable)

Вам потребуется преобразовать объект в экземпляр класса, используя, например, Object.assign.

0 голосов
/ 31 октября 2018
get fullName()

Это геттер , а не обычная функция.

Когда вы обращаетесь к свойству fullName, оно неявно вызывает функцию и возвращает вам возвращаемое значение (которое является строкой).

Попытка вызова fullName() попытается обработать эту строку как функцию, а это не так.

Если бы вы определили это без get, тогда вы могли бы позвонить fullName().

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