js_name = Blah

js_name 属性可用于在 JS 中导出与 Rust 中不同的名称。它可以应用于导出的 Rust 函数和类型。

例如,这通常用于将 Rust 的蛇形命名标识符转换为 JavaScript 的驼峰命名标识符


# #![allow(unused_variables)]
#fn main() {
#[wasm_bindgen(js_name = doTheThing)]
pub fn do_the_thing() -> u32 {
    42
}
#}

这可以在 JavaScript 中使用,如下所示

import { doTheThing } from './my_module';

const x = doTheThing();
console.log(x);

与导入类似,js_name 也可以用于重命名导出到 JS 的类型


# #![allow(unused_variables)]
#fn main() {
#[wasm_bindgen(js_name = Foo)]
pub struct JsFoo {
    // ..
}
#}

以像下面这样访问

import { Foo } from './my_module';

// ...

请注意,将方法附加到 JS 类 Foo 应该通过 js_class 属性完成


# #![allow(unused_variables)]
#fn main() {
#[wasm_bindgen(js_name = Foo)]
pub struct JsFoo { /* ... */ }

#[wasm_bindgen(js_class = Foo)]
impl JsFoo {
    // ...
}
#}

它还可以用于重命名导出的函数和方法的参数


# #![allow(unused_variables)]
#fn main() {
#[wasm_bindgen]
pub fn foo(
    #[wasm_bindgen(js_name = "firstArg")]
    arg1: String,
) {
    // function body
}

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

#[wasm_bindgen]
impl Foo {
    pub fn foo(
        &self,
        #[wasm_bindgen(js_name = "firstArg")]
        arg1: u32,
    ) {
        // function body
    }
}
#}

这将生成以下 JS 绑定

/**
 * @param {string} firstArg
 */
export function foo(firstArg) {
    // ...
}

export class Foo {
    /**
     * @param {number} firstArg
     */
    foo(firstArg) {
        // ...
    }
}