It's not optional on the base interface where addEventListener() and removeEventListener() are defined. I think it's EventTarget. Since subclasses and implementers of interfaces aren't allowed to change the signature of a method in ActionScript, externc uses the original signature and ignores the overload on FileReader.
I opened a pull request for Closure Compiler to make that parameter optional on EventTarget in the official externs (it was non-optional because some old browsers required it, I think). Google seemed open to the idea, but I don't think they ever merged it. - Josh On Mar 18, 2017 12:12 PM, "Harbs" <harbs.li...@gmail.com> wrote: > I found what looks like a bug in the FileReader typedefs: > > The following in fileapi.js: > > /** > * @param {boolean=} opt_useCapture > * @override > * @return {undefined} > */ > FileReader.prototype.addEventListener = function(type, listener, > opt_useCapture) > {}; > > /** > * @param {boolean=} opt_useCapture > * @override > * @return {undefined} > */ > FileReader.prototype.removeEventListener = function(type, listener, > opt_useCapture) {}; > > compiles to this in FileReader.as: > > /** > * @param opt_useCapture [(boolean|undefined)] > * @see [fileapi] > * @returns {undefined} > */ > public function addEventListener(type:String, listener:Object, > useCapture:Boolean):Object /* undefined */ { return null; } > > /** > * @param opt_useCapture [(boolean|undefined)] > * @see [fileapi] > * @returns {undefined} > */ > public function removeEventListener(type:String, listener:Object, > useCapture:Boolean):Object /* undefined */ { return null; } > > The result is wrong because the third parameter is supposed to be > optional. The thing is, I don’t understand how we ended up with the output > we did. The parameter was renames and retyped… > > Harbs