Boxed Number Slices: Box<[u8]>, Box<[i8]>, Box<[u16]>, Box<[i16]>, Box<[u32]>, Box<[i32]>, Box<[u64]>, Box<[i64]>, Box<[f32]>, Box<[f64]>, Box<[MaybeUninit<u8>]>, Box<[MaybeUninit<i8>]>, Box<[MaybeUninit<u16>]>, Box<[MaybeUninit<i16>]>, Box<[MaybeUninit<u32>]>, Box<[MaybeUninit<i32>]>, Box<[MaybeUninit<u64>]>, Box<[MaybeUninit<i64>]>, Box<[MaybeUninit<f32>]>, and Box<[MaybeUninit<f64>]>

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 TypedArray of the appropriate type (Int32Array, Uint8Array, etc...)

Note: The contents of the slice are copied into a JavaScript TypedArray from the Wasm linear memory when returning a boxed slice to JavaScript, and vice versa when receiving a JavaScript TypedArray as a boxed slice in Rust.

Note: Numeric MaybeUninit<T> can always be assumed to be initialized upon transmission from Rust to JS and vice-versa. However, uninitialized values coming from Rust might contain unspecified values.

Example Rust Usage

use wasm_bindgen::prelude::*; #[wasm_bindgen] pub fn take_boxed_number_slice_by_value(x: Box<[f64]>) {} #[wasm_bindgen] pub fn return_boxed_number_slice() -> Box<[u32]> { (0..42).collect::<Vec<u32>>().into_boxed_slice() } #[wasm_bindgen] pub fn take_option_boxed_number_slice(x: Option<Box<[u8]>>) {} #[wasm_bindgen] pub fn return_option_boxed_number_slice() -> Option<Box<[i32]>> { None }

Example JavaScript Usage

import { take_boxed_number_slice_by_value, return_boxed_number_slice, take_option_boxed_number_slice, return_option_boxed_number_slice, } from './guide_supported_types_examples'; take_boxed_number_slice_by_value(new Uint8Array(100)); let x = return_boxed_number_slice(); console.log(x instanceof Uint32Array); // true take_option_boxed_number_slice(null); take_option_boxed_number_slice(undefined); take_option_boxed_number_slice(new Int16Array(256)); let y = return_option_boxed_number_slice(); if (y == null) { // ... } else { console.log(x instanceof Int32Array); // true }