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

Rust中的struct在TypeScript中的等效对应概念是什么

Rust struct 与 TypeScript 概念的对应关系

直接给出结论:Rust 中的 struct 和 TypeScript 的 interface 特性并不完全等价。struct 是 Rust 中承担多种结构化定义能力的复合类型,需要根据它的具体形态和使用场景,对应到 TS 里的不同概念。


核心本质差异

TS 的interface是纯编译期存在的类型契约,运行时会完全擦除,仅用于类型检查,支持同名声明自动合并字段,本身不产生任何运行时代码。
Rust 的struct是运行时真实存在的内存布局定义,属于可实例化的具体类型,定义完成后结构封闭,不支持外部随意追加字段,除了存储数据之外,还可以绑定方法、实现trait(Rust的接口抽象能力)。


不同形态struct的TS等效对应

Rust中struct一共分三类常见写法,分别对应TS的不同特性:

1. 带命名字段的普通struct

这是最常用的struct形态,和C++标准结构体逻辑一致,示例代码:

// Rust 定义
struct User {
    id: u64,
    username: String,
    is_active: bool,
}

对应TS概念分两种场景:

  • 如果仅做跨层数据传递的类型标注(比如FFI/WASM边界传递的纯数据),等效于TS的interface或者type定义的对象类型:
    // TS 类型层等效
    interface User {
      id: number;
      username: string;
      isActive: boolean;
    }
    
    注意Rust的struct是结构封闭的,这点反而更接近TS用type定义的对象类型——TS的interface支持同名声明合并,会自动追加字段,和Ruststruct的封闭特性不一致。
  • 如果struct通过impl块绑定了成员方法、实现了trait,做封装层时等效于TS的class:class同时定义了实例的字段形状、可挂载实例/静态方法,是运行时真实存在的类型,和Rust中实例化后调用方法的使用逻辑完全对齐,也是napi-rs、wasm-bindgen这类绑定工具默认生成的封装形式。

2. 元组结构体(Tuple Struct)

这类struct没有字段名,按位置存储值,常用于轻量封装、位置化数据结构,示例代码:

// Rust 定义
struct Point(i32, i32, i32); // 三维坐标点
struct UserId(u64); // 单字段newtype模式,做类型安全防护

对应TS概念:

  • 多字段的元组结构体,等效于TS的元组类型:type Point = [number, number, number];
  • 单字段的newtype结构体(Rust中用来避免同基础类型传参混淆,比如防止把普通u64数值当UserId传递),TS没有原生支持,一般用**品牌类型(Branded Type)**模拟:
    type UserId = number & { readonly __brand: 'UserId' };
    

3. 单元结构体(Unit Struct)

没有任何字段的结构体,一般作为标记类型、无状态哨兵值使用,示例代码:

// Rust 定义
struct RequestSentinel;

对应TS的字面量标记类型或者空对象类型:type RequestSentinel = 'RequestSentinel';


适配层开发参考

给Rust项目做TS适配层时,如果用常规的FFI/WASM绑定工具:

  • 跨边界传递的纯数据结构,直接用interface/type对齐字段名、字段类型即可,注意遵循Rust蛇形命名转TS小驼峰的惯例
  • 需要持有Rust侧堆内存实例、调用实例方法的struct,统一用TSclass做封装,内部维护Rust实例的指针句柄,把Rust暴露的方法挂载到class原型上即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:57:24