Задать вопрос
@historydev

Как типизировать созданные геттеры?

export class User {
    private readonly props: UserProps;

    constructor(props: UserProps) {
        this.props = userSchema.parse(props);

        for (const key of Object.keys(props) as Array<keyof UserProps>) {
            Object.defineProperty(this, key, {
                get: () => this.props[key],
                enumerable: true,
            });
        }
    }
}

const user = new User({firstname: 'John', /* other fields */});
console.log(user.firstname); // TS2339: Property firstname does not exist on type User
  • Вопрос задан
  • 258 просмотров
Подписаться 1 Простой 18 комментариев
Помогут разобраться в теме Все курсы
  • Skillbox
    Курс по TypeScript
    3 месяца
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
  • Merion Academy
    Онлайн-курс по TypeScript
    2 месяца
    Далее
Решения вопроса 1
Alexandroppolus
@Alexandroppolus
кодир
Я тоже не совсем понял, почему нужен именно класс, но если уж приспичило, то типизировать можно так: ссылка

и поскольку у тебя фиксированный набор полей, то лучше однократно навесить геттеры на прототип этого класса. То есть на User.prototype. Будет экономичнее при создании множества экземпляров. Только функцию для геттера сделать не стрелочной
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы