jsinterop.annotations

## Annotation Type JsFunction

    @Retention(value=RUNTIME)
     @Target(value=TYPE)
     @Documented
    public @interface JsFunction

JsFunction marks a functional interface as being the definition of a JavaScript function.

There are some limitations exists on JsFunction to make them practical and efficient:

- A JsFunction interface cannot extend any other interfaces.
- A class may not implement more than one JsFunction interface.
- A class that implements a JsFunction type cannot be a `JsType` (directly or indirectly).
- Fields and defender methods of the interfaces should be marked with `JsOverlay` and cannot be overridden by the implementations.

As a best practice, we also recommend marking JsFunction interfaces with FunctionalInterface to get improved checking in IDEs.

Instanceof and Castability:

Instanceof and casting for JsFunction is effectively a JavaScript `'typeof'` check to determine if the instance is a function.