unchecked_return_type and unchecked_param_type - The `wasm-bindgen` Guide

## Keyboard shortcuts

Press `←` or `→` to navigate between chapters

Press `S` or `/` to search in the book

Press `?` to show this help

Press `Esc` to hide this help

# `unchecked_return_type` and `unchecked_param_type`

Return and parameter types of exported functions and methods can be overwritten with `#[wasm_bindgen(unchecked_return_type)]` and `#[wasm_bindgen(unchecked_param_type)]`.

> Note: Types that are provided using `#[wasm_bindgen(unchecked_return_type)]` and `#[wasm_bindgen(unchecked_param_type)]` aren't checked for their contents. They will end up in a function signature and JSDoc exactly as they have been specified. E.g. `#[wasm_bindgen(unchecked_return_type = "number")]` on a function returning `String` will return a `string`, not a `number`, even if the TS signature and JSDoc will say otherwise.

    #![allow(unused)]
    fn main() {
    #[wasm_bindgen(unchecked_return_type = "Foo")]
    pub fn foo(
        #[wasm_bindgen(unchecked_param_type = "Bar")]
        arg1: JsValue,
    ) -> JsValue {
        // function body
    }

    #[wasm_bindgen]
    pub struct Foo {
        // properties
    }

    #[wasm_bindgen]
    impl Foo {
        #[wasm_bindgen(unchecked_return_type = "Baz")]
        pub fn foo(
            &self,
            #[wasm_bindgen(unchecked_param_type = "Bar")]
            arg1: JsValue,
        ) -> JsValue {
            // function body
        }
    }
    }

Which will generate the following JS bindings:

    /**
     * @param {Bar} arg1
     * @returns {Foo}
     */
    export function foo(arg1) {
        // ...
    }

    export class Foo {
        /**
         * @param {Bar} arg1
         * @returns {Baz}
         */
        foo(arg1) {
            // ...
        }
    }