You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过wasm_bindgen将Rust Vec<String>映射为TS的Array<string>

解决方案

要将SampleResult的errors字段TypeScript类型从Array<any>改为Array<string>,你需要把typescript_type参数放在#[wasm_bindgen]属性内部,而非作为方法内的变量。以下是具体实现方式:

正确代码示例

假设你的SampleResult结构体和实现代码如下,调整errors getter的属性配置即可:

use wasm_bindgen::prelude::*;
use js_sys::Array;

#[wasm_bindgen]
pub struct SampleResult {
    errors: Array,
}

#[wasm_bindgen]
impl SampleResult {
    // 将typescript_type作为#[wasm_bindgen]的属性参数传入
    #[wasm_bindgen(getter, typescript_type = "Array<string>")]
    pub fn errors(&self) -> Array {
        self.errors.clone()
    }
}

关键说明

  • 错误原因:你之前直接在getter方法内写typescript_type = "Array<string>",会被Rust编译器识别为未使用的变量定义,因此报错。正确的用法是将其作为#[wasm_bindgen]的属性参数,与getter标记并列。
  • 运行时约束:虽然TypeScript类型会被修正为Array<string>,但你需要确保Rust代码中errors数组内实际存储的都是字符串类型(比如通过js_sys::Array::from_iter传入&str或String的迭代器),避免运行时类型不匹配。

替代方案:使用Vec<String>直接暴露

如果你的errors原本就是Rust的Vec<String>,可以直接暴露该类型,wasm-bindgen会自动生成Array<string>的TypeScript类型,无需手动指定:

use wasm_bindgen::prelude::*;

#[wasm_bindgen]
pub struct SampleResult {
    errors: Vec<String>,
}

#[wasm_bindgen]
impl SampleResult {
    #[wasm_bindgen(getter)]
    pub fn errors(&self) -> Vec<String> {
        self.errors.clone()
    }
}

内容的提问来源于stack exchange,提问作者Kevin Hakanson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 12:20:50