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

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 }