сообщения об ошибках в экземпляре класса ES6 - PullRequest
1 голос
/ 02 июня 2019

После многих лет использования JavaScript я собираюсь написать свой первый класс JS (!).Я хотел бы выдать ошибку, если не указан обязательный параметр конструктора.Вроде как

class Foo {
    constructor(options) {
        super(options);

        if (!(this.reqd = options.reqd)) {
            return 'error: 'reqd' is required'
        }

        this.optional = options.optional;
    }
}

const f = new Foo({optional: 'frob'}) выдаст ошибку, но const f = new Foo({reqd: 'blub'}) или const f = new Foo({reqd: 'blub', optional: 'frob'}) сработает.

Можно ли это сделать?

1 Ответ

3 голосов
/ 02 июня 2019

Убедитесь, что объект options имеет свойство reqd с hasOwnProperty, а если нет, выведите ошибку:

class Foo {
    constructor(options) {
        // super(options);
        if (!options.hasOwnProperty('reqd')) {
          throw new Error('reqd property is required');
        }
        this.reqd = options.reqd;
        // if you don't want to assign `undefined` for a non-existent optional property,
        // use a hasOwnProperty check before assigning
        this.optional = options.optional;
    }
}

const f1 = new Foo({ reqd: 'val' });
console.log('next');
const f2 = new Foo({ optional: 'val' });

Если вы хотите, чтобы сгенерировалась ошибка, вы должны явно throw это сделать, иначе ошибки не будет (или, по крайней мере, до тех пор, пока позже),Просто возвращение строки не является ошибочным.

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