Box<[T]> and Vec<T>

T parameter &T parameter &mut T parameter T return value Option<T> parameter Option<T> return value JavaScript representation
Yes No No Yes Yes Yes A JavaScript Array object

You can pass boxed slices and Vecs of several different types to and from JS:

  • JsValues.
  • Imported JavaScript types.
  • Exported Rust types.
  • Strings.

You can also pass boxed slices of numbers to JS, except that they're converted to typed arrays (Uint8Array, Int32Array, etc.) instead of regular arrays.

Example Rust Usage

use wasm_bindgen::prelude::*; #[wasm_bindgen] pub fn take_boxed_js_value_slice_by_value(x: Box<[JsValue]>) {} #[wasm_bindgen] pub fn return_boxed_js_value_slice() -> Box<[JsValue]> { vec![JsValue::NULL, JsValue::UNDEFINED].into_boxed_slice() } #[wasm_bindgen] pub fn take_option_boxed_js_value_slice(x: Option<Box<[JsValue]>>) {} #[wasm_bindgen] pub fn return_option_boxed_js_value_slice() -> Option<Box<[JsValue]>> { None }

Example JavaScript Usage

import { take_boxed_js_value_slice_by_value, return_boxed_js_value_slice, take_option_boxed_js_value_slice, return_option_boxed_js_value_slice, } from './guide_supported_types_examples'; take_boxed_js_value_slice_by_value([null, true, 2, {}, []]); let values = return_boxed_js_value_slice(); console.log(values instanceof Array); // true take_option_boxed_js_value_slice(null); take_option_boxed_js_value_slice(undefined); take_option_boxed_js_value_slice([1, 2, 3]); let maybeValues = return_option_boxed_js_value_slice(); if (maybeValues == null) { // ... } else { console.log(maybeValues instanceof Array); // true }