tauri-ts-generator
CLI инструмент для автоматической генерации TypeScript биндингов из Tauri команд.
Описание
tauri-ts-generator сканирует ваш Rust код, находит все функции с макросом #[tauri::command] и автоматически генерирует:
- TypeScript интерфейсы для Rust структур и перечислений
- TypeScript функции-обёртки для вызова Tauri команд через
invoke()
Это обеспечивает type-safe взаимодействие между TypeScript frontend и Rust backend, минимизируя ручное написание повторяющегося кода.
Установка
Или сборка из исходников:
Быстрый старт
1. Инициализация конфигурации
Это создаст файл tauri-codegen.toml с настройками по умолчанию.
2. Настройка конфигурации
Отредактируйте tauri-codegen.toml:
[]
= "src-tauri/src"
= ["tests", "target"]
[]
= "src/generated/types.ts"
= "src/generated/commands.ts"
[]
= ""
= ""
= ""
= ""
3. Генерация TypeScript кода
Или с подробным выводом:
Пример
Rust код (вход)
use ;
pub async
pub async
TypeScript код (выход)
types.ts:
// This file was auto-generated by tauri-ts-generator
// Do not edit this file manually
export interface User {
id: number;
name: string;
email: string | null;
}
export type UserStatus = "Active" | "Inactive" | "Pending";
commands.ts:
// This file was auto-generated by tauri-ts-generator
// Do not edit this file manually
import { invoke } from "@tauri-apps/api/core";
import type { User } from "./types";
export async function getUser(id: number): Promise<User> {
return invoke<User>("get_user", { id });
}
export async function getAllUsers(): Promise<User[]> {
return invoke<User[]>("get_all_users");
}
export async function greet(name: string): Promise<string> {
return invoke<string>("greet", { name });
}
Маппинг типов
Базовые типы
| Rust | TypeScript |
|---|---|
String, &str, char |
string |
i8, i16, i32, i64, u8, u16, u32, u64 |
number |
f32, f64 |
number |
bool |
boolean |
Vec<T> |
T[] |
Option<T> |
T | null |
Result<T, E> |
Promise<T> |
HashMap<K, V> |
Record<K, V> |
() |
void |
| Custom struct | TypeScript interface |
| Simple enum | String union type |
Внешние типы (crates)
| Rust | TypeScript | Описание |
|---|---|---|
chrono::DateTime<Tz> |
string |
ISO 8601 формат |
chrono::NaiveDateTime |
string |
ISO 8601 формат |
chrono::NaiveDate |
string |
YYYY-MM-DD |
chrono::NaiveTime |
string |
HH:MM:SS |
time::OffsetDateTime |
string |
ISO 8601 формат |
time::PrimitiveDateTime |
string |
ISO 8601 формат |
uuid::Uuid |
string |
UUID строка |
rust_decimal::Decimal |
string |
Числовая строка |
std::path::PathBuf |
string |
Путь к файлу |
url::Url |
string |
URL строка |
std::net::IpAddr |
string |
IP адрес |
std::time::Duration |
number |
Секунды |
serde_json::Value |
unknown |
Любой JSON |
bytes::Bytes |
number[] |
Массив байт |
| Complex enum | Discriminated union |
Конфигурация
[input]
| Параметр | Описание | По умолчанию |
|---|---|---|
source_dir |
Директория с Rust исходниками | src-tauri/src |
exclude |
Список директорий/файлов для исключения | ["tests", "target"] |
[output]
| Параметр | Описание | По умолчанию |
|---|---|---|
types_file |
Путь для генерации TypeScript типов | src/generated/types.ts |
commands_file |
Путь для генерации TypeScript команд | src/generated/commands.ts |
[naming]
| Параметр | Описание | По умолчанию |
|---|---|---|
type_prefix |
Префикс для имён типов | "" |
type_suffix |
Суффикс для имён типов | "" |
function_prefix |
Префикс для имён функций | "" |
function_suffix |
Суффикс для имён функций | "" |
CLI команды
generate
init
Особенности
- Автоматический парсинг — использует
synдля анализа Rust AST - Поддержка async функций — корректно обрабатывает async/await
- Пользовательские типы — парсит struct и enum с атрибутами
#[derive(Serialize)] - serde rename — учитывает
#[serde(rename = "...")] - Специальные типы Tauri — автоматически пропускает
State,Window,AppHandle - Вложенные модули — сканирует команды внутри
modблоков
Лицензия
MIT