Свойство ‘reter’ не существует для типа ‘typeof TESTING’

#typescript

#typescript

Вопрос:

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

Игровая площадка Typescript

 class TEST {
    name: string;
    protected reter: string = 'show retry';
    constructor(name: string, public age: number) {
        this.name = name;
    }
}

class TESTING extends TEST {
    constructor(public name:string, public age:number) {
        super('sd', 12);
        this.name = 'indraraj'
    }

    static getReter() {
        return this.reter;
    }
}

let test = new TESTING('indra', 12);
console.log(TESTING.getReter)
console.log(test)

  

Ответ №1:

Потому что getReter() это статический метод.

Это означает, что к нему обращается конструктор класса ( i.e TESTING.getReter() ), а не экземпляр, следовательно — не знает о this , что является ссылкой на экземпляр класса, а не на сам конструктор класса.

удалите static обозначение, и у вас будет доступ.

Для получения дополнительной информации следуйте этому сообщению: https://www.typescriptlang.org/docs/handbook/classes.html#static-properties

Комментарии:

1. -_- мое плохое спасибо @Sillicakes

2. @silicakes есть ли способ получить доступ к свойствам класса внутри статического метода?

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

4. Представьте, что у вас есть несколько экземпляров с разными значениями и вы используете функцию поиска, чтобы найти тот, который вам нужен. Простой реализацией было бы передавать каждый экземпляр статическому ключу в построителе классов после каждого создания экземпляра.