Ошибка типа: <...> не является функцией - PullRequest
0 голосов
/ 05 марта 2020

Итак, я сталкиваюсь с проблемой и не знаю точно, как ее решить. После прочтения в ES6 делаю c. Я думаю, что это правильно настроено, но когда я вызываю <UserInstance>.getID(), я получаю сообщение об ошибке:

TypeError: currentUser.getID не является функцией .

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

Вот мой класс определение:

import { v4String } from "uuid/interfaces";
class User {
    private id!: v4String;
    constructor() {
        this.getID = this.getID.bind(this);
        this.setID = this.setID.bind(this);
    }
    getID = () => this.id;
    setID = (id: v4String) => this.id = id;
}
export default User; 

Я почти уверен, что настроил класс, но есть ли что-то, чего мне не хватает в функции стрелки? Кажется, не имеет значения, настроил ли я его с помощью синтаксиса функции стрелки или настроил его как

getID() {
   return this.id
}

Вот код, который его вызывает, currentUser предоставляется поставщиком контекста и внедряется в реквизит с использованием компонента высшего порядка:

componentDidMount() {
        const currentUser: User = this.props.currentUser;

        this.setState({ loading: true });

        const currentUserID = currentUser.getID(); <---- FAILS HERE
        const currentUserIDString = currentUserID.toString();

        }
    }

1 Ответ

1 голос
/ 05 марта 2020

TypeError: currentUser.getID не является функцией.

Эта ошибка означает, что currentUser является некоторым значением, для которого нет метода getID. Ваш класс в порядке, поэтому что-то не так со значением currentUser, а не с классом User.

Похоже, что currentUser является простым javascript объектом, а не экземпляром вашего class.

const currentUser: User = this.props.currentUser;

Эта строка не делает currentUser экземпляром User, это просто подсказка типа для машинописи. И это неверная подсказка типа.

Где-то (где вам решать) вам нужно вызвать new User(), чтобы иметь возможность использовать методы, которые вы определили в своем пользовательском классе. Если вы никогда не вызываете new User(), то у вас нет экземпляра User, у вас просто простой объект.

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