Skip to content
/ ts-rs Public
forked from Aleph-Alpha/ts-rs

Generate TypeScript bindings from Rust types

License

Notifications You must be signed in to change notification settings

no-day/ts-rs

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

logo
ts-rs

generate typescript interface/type declarations from rust types

why?

When building a web application in rust, data structures have to be shared between backend and frontend.
Using this library, you can easily generate TypeScript bindings to your rust structs & enums, so that you can keep your types in one place.

ts-rs might also come in handy when working with webassembly.

how?

ts-rs exposes a single trait, TS. Using a derive macro, you can implement this interface for your types.
Then, you can use this trait to obtain the TypeScript bindings.
We recommend doing this in your tests. see the example

get started

[dependencies]
ts-rs = "4.0"
use ts_rs::{TS, export};

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

export! {
    User => "bindings.ts"
}

When running cargo test, the TypeScript bindings will be exported to the file bindings.ts.

features

  • generate interface declarations from rust structs
  • generate union declarations from rust enums
  • inline types
  • flatten structs/interfaces
  • generate necessary imports when exporting to multiple files
  • export .. and declare ..

serde compatability

With serde-compat, serde attributes can be parsed for enums and structs.
Supported serde attributes:

  • rename
  • rename-all
  • tag
  • content
  • untagged
  • skip
  • skip_serializing
  • skip_deserializing
  • skip_serializing_if = "Option::is_none"
  • flatten
  • default

todo

  • serde compatibility layer
  • documentation
  • use typescript types across files
  • more enum representations
  • generics
  • don't require 'static

About

Generate TypeScript bindings from Rust types

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 100.0%