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



>我有这个:

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 不会编译(。

我想最好的办法是:

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 的用例确实会弹出,不是吗?

最新更新