有没有办法将wasm-bindgen的JsValue的TypeScript类型注解为更有意义的东西?

dz6r00yl  于 2023-05-08  发布在  TypeScript
关注(0)|答案(1)|浏览(164)

我有一个Rust / Wasm函数,我正在使用wasm_bindgen生成TypeScript绑定。JsValue的输出类型是any。有没有什么方法可以在不编辑自动生成的*.d.ts的情况下手动注解类型,使其更有意义?

#[wasm_bindgen]
impl GameClient {
    pub fn game_list(&self) -> JsValue {
        JsValue::from_serde(&self.game_list).unwrap()
    }
}
ljsrvy3e

ljsrvy3e1#

我遇到的几个解决方案:

ts-rs

repo
在撰写本文时,与我找到的其他解决方案相比,这个解决方案在github上拥有最多的星星。
“ts-rs”暴露了一个特征TS。使用派生宏,可以为您的类型实现此接口。然后,您可以使用此trait来获取TypeScript绑定。
示例:

use ts_rs::TS;

#[derive(TS)]
#[ts(export)]
struct User {
    user_id: i32,
    first_name: String,
    last_name: String,
}

当运行cargo test时,TypeScript绑定将被导出到文件bindings/User. ts。

Tsify

repo
Tsify是一个用于从Rust代码生成TypeScript定义的库。将其与wasm-bindgen一起使用将自动将类型输出到.d.ts
根据他们的README,这个库允许这样的代码:

#[derive(Tsify, Serialize, Deserialize)]
#[tsify(into_wasm_abi, from_wasm_abi)]
pub struct Point {
    x: i32,
    y: i32,
}

成为以下:

export interface Point {
  x: number;
  y: number;
}

在写这个答案后不久,我将测试这些库并评论对我有效的库。希望这对你有帮助:)

相关问题