Проверка типов во время выполнения параметров конструктора, которые передаются в super - PullRequest
0 голосов
/ 09 мая 2018

У меня есть это:

export class XMLParser extends Transform {

  constructor(opts?: XMLParserOpts, to?: TransformOptions) {

    super(Object.assign({}, to || {}, {objectMode: true}));

  }

}

в принципе мне всегда нужно objectMode чтобы быть правдой. Однако что, если пользователь передал какое-то странное значение для to? Как я могу проверить это, чтобы убедиться, что тип определен как объект?

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

   constructor(opts?: XMLParserOpts, to?: TransformOptions) {

        if(to && typeof to !== 'object'){
          throw new Error('no good bozo');
        }

        super(Object.assign({}, to || {}, {objectMode: true}));

    }

как сделать то, что я ищу? (TS не скомпилируется, если super не первый вызов в конструкторе).

1 Ответ

0 голосов
/ 10 мая 2018

Я думаю, что лучше всего сделать что-то вроде:

  constructor(opts?: XMLParserOpts, to?: TransformOptions) {

        super((function(){

          if(to && typeof to !== 'object'){
              throw new Error('no good bozo');
           }

           return Object.assign({}, to || {}, {objectMode: true})

        })());

    }

случаи использования IIFE действительно всплывают, не так ли.

...