Imported JavaScript Types - The `wasm-bindgen` Guide

# Imported `extern Whatever;` JavaScript Types

`T` parameter | `&T` parameter | `&mut T` parameter | `T` return value | `Option<T>` parameter | `Option<T>` return value | JavaScript representation
--- | --- | --- | --- | --- | --- | ---
Yes | Yes | No | Yes | Yes | Yes | Instances of the extern `Whatever` JavaScript class / prototype constructor

## Example Rust Usage

    #![allow(unused)]
    fn main() {
    use wasm_bindgen::prelude::*;

    #[wasm_bindgen]
    #[derive(Copy, Clone, Debug)]
    pub enum NumberEnum {
        Foo = 0,
        Bar = 1,
        Qux = 2,
    }

    #[wasm_bindgen]
    #[derive(Copy, Clone, Debug)]
    pub enum StringEnum {
        Foo = "foo",
        Bar = "bar",
        Qux = "qux",
    }

    #[wasm_bindgen]
    pub struct Struct {
        pub number: NumberEnum,
        pub string: StringEnum,
    }

    #[wasm_bindgen]
    extern "C" {
        pub type SomeJsType;
    }

    #[wasm_bindgen]
    pub fn imported_type_by_value(x: SomeJsType) {
        /* ... */
    }

    #[wasm_bindgen]
    pub fn imported_type_by_shared_ref(x: &SomeJsType) {
        /* ... */
    }

    #[wasm_bindgen]
    pub fn return_imported_type() -> SomeJsType {
        unimplemented!()
    }

    #[wasm_bindgen]
    pub fn take_option_imported_type(x: Option<SomeJsType>) {
        /* ... */
    }

    #[wasm_bindgen]
    pub fn return_option_imported_type() -> Option<SomeJsType> {
        unimplemented!()
    }
    }

## Example JavaScript Usage

    import {
      imported_type_by_value,
      imported_type_by_shared_ref,
      return_imported_type,
      take_option_imported_type,
      return_option_imported_type,
    } from './guide_supported_types_examples';

    imported_type_by_value(new SomeJsType());
    imported_type_by_shared_ref(new SomeJsType());

    let x = return_imported_type();
    console.log(x instanceof SomeJsType); // true

    take_option_imported_type(null);
    take_option_imported_type(undefined);
    take_option_imported_type(new SomeJsType());

    let y = return_option_imported_type();
    if (y == null) {
      // ...
    } else {
      console.log(y instanceof SomeJsType); // true
    }