Got it. So if I were trying to hide a require() call, @flexjsignorecoercion could be used in my code without requiring users to do anything. I think I may be able to work with that. I'll play around with it, when I have a moment.
- Josh On Wed, Dec 2, 2015 at 3:10 PM, Alex Harui <aha...@adobe.com> wrote: > Currently it works at the method's ASDoc, not at the class level. > > Here's an excerpt: > > > /** > * @flexjsignorecoercion org.apache.flex.core.WrappedHTMLElement > * @flexjsignorecoercion HTMLBodyElement > */ > COMPILE::JS > override public function start():void > { > var body:HTMLBodyElement; > > // For createjs, the application is the same as the canvas > // and it provides convenient access to the stage. > > element = document.createElement('canvas') as > WrappedHTMLElement; > element.id = 'flexjsCanvas'; > element.width = 700; > element.height = 500; > > body = document.getElementsByTagName('body')[0] as > HTMLBodyElement; > body.appendChild(this.element); > > ... > > > > > > On 12/2/15, 3:07 PM, "Josh Tynjala" <joshtynj...@gmail.com> wrote: > > >Interesting... I didn't know about that. How would @flexjsignorecoercion > >be > >used? In the asdocs for a class, like this? > > > >/** > > * @flexjsignorecoercion > > */ > >public class MyClass {} > > > >If I'm understanding your correctly, when using this tag, the JS output > >would not pass the value to Language.as()? > > > >//as > >var test = something as MyClass; > > > >//js > >var test = something; //instead of Language.as(something) > > > >If that's how it works, I think it might be good enough for my needs. > > > >- Josh > > > > > >On Wed, Dec 2, 2015 at 2:51 PM, Alex Harui <aha...@adobe.com> wrote: > > > >> > >> > >> On 12/2/15, 2:37 PM, "Josh Tynjala" <joshtynj...@gmail.com> wrote: > >> > >> >Oh, I see. I didn't realize that you were thinking that users would > >>import > >> >something and also manually call require(). In that case, yes, you > >>could > >> >still potentially have proper type checking. > >> > > >> >I like the idea of using some kind of wrapper class to hide the > >>require() > >> >call. It's kind of messy to both import and call require(), so I really > >> >would prefer to hide one or the other, if possible. > >> > >> It's up to you or whoever writes this code. A wrapper adds a layer of > >> function calls but does let you hide some ugliness. > >> > >> > > >> >There's one thing that seems like an issue to me, though. Using an as > >>cast > >> >with require() will probably result in a null result because what is > >> >returned by require("fs") doesn't actually extend an FS class (or > >> >implement > >> >an FS interface). > >> > > >> >var fs:FS = require("fs") as FS; > >> > >> We have this problem already. There is a special ASDoc tag called > >> @flexjsignorecoercion that suppresses "as" code in the cross-compiled > >> output. I've considered trying to get the compiler to automatically > >> suppress the "as" code for any "as" usage that references a class in an > >> external-library-path SWC. That seems like it could fail you in some > >> distributed development cases where you have other code that does > >>support > >> AS in an external-library-path SWC. We could add file-level suppression > >> as well, or have a config option that lists certain coercions to always > >> suppress. Definitely open to ideas on this, but the fact is, the > >>compiler > >> will not let you have type-checking without using "as" so you sort of > >>have > >> to have a scheme to deal with it. > >> > >> -Alex > >> > >> > >