RangeError: превышен максимальный размер стека вызовов – Typescript

Когда я пытаюсь получить имя класса Player в index.ts, я получаю следующую ошибку:

/Users/pp/Developer/Typescript/src/lib/player.ts:10
    public get name() { return this.name; }
                                    ^
RangeError: Maximum call stack size exceeded
    at Player.get name [as name]

Вот код: библиотека/player.ts:

export class Player {
    private _name: string;

    constructor(name: string) {
        this._name = name;
    }

    public get name() { return this.name; }
    public set name(value: string) { this.name = value; }
}

индекс.ц:

import { Player } from './lib/player';

const player = new Player('name');
console.info(player.name);

Доступ this.name звонит get name() который обращается this.name который звонит get name() и так до бесконечности.

Robby Cornelissen 05.04.2024 07:18

Предположительно, вам нужен return._name для геттера и this._name = value для сеттера.

VLAZ 05.04.2024 07:20
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
2
3
275
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Доступ к this.name вызовам get name() который обращается к this.name который вызывает get name() и так до бесконечности (или до тех пор, пока вы не исчерпаете стек вызовов).

Вероятно, вы намеревались сделать:

export class Player {
    private _name: string;
    
    constructor(name: string) {
        this._name = name;
    }
    
    public get name() { return this._name; }
    public set name(value: string) { this._name = value; }
}

Другие вопросы по теме

Почему редактирование значения с использованием указателя, то есть частного поля класса, требует объявления дополнительной переменной?
Как устранить ошибку компилятора: в моем случае нет соответствующей функции для вызова dmhFS::dmhFS()?
Getter возвращает неопределенное значение в операторе if. Кажется, не работает для сравнения
Как сохранить/получить информацию о классе в/из таблицы?
C++: Как реализовать указатель на другой класс в качестве члена?
Как сделать так, чтобы я мог передать указатель класса на другой класс, который был объявлен из первого класса
Является ли использование классов и частных полей в качестве альтернативы переменным среды плохой идеей?
Конфликтующее объявление при передаче потока файлов в конструктор
Непонимание классов в Python, доступ и изменение переменных экземпляра
Если у подкласса нет конструктора, как и у суперкласса, то почему я могу создать экземпляр подкласса?