运行时类型检查传递给super的构造函数选项

时间:2018-05-09 18:50:17

标签: typescript typescript-typings typescript2.0 es6-class tsc

我有这个:

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}));

    }

怎么做我要找的东西? (如果super不是构造函数中的第一个调用,则TS不会编译。)

1 个答案:

答案 0 :(得分:0)

我想最好的办法就是:

  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的用例确实不会弹出。