Tauri Types
A small library that translates the types from Rust to TypeScript for better integration for the invoke function from Tauri.
Check it out on:
Usage
- Add
Tauri Typesto your project.
- Add the derive to a type you want to have access to in your JavaScript program. It can be either struct or enum.
use TauriType;
That's going to generate this in your tauri-types.ts file.
export type User = {
name: string;
username: string;
password: string;
age: number;
};
You can use the type by importing it from the tauri-types.ts file.
import { type User } from './tauri-types';
- Add the
tauri_types::commandmacro above any function you want to export.
(You can export it with use tauri_types::command;, but it's better to use it this way, so it doesn't collide with the command macro from tauri.)
- Replace
tauri::generate_handlermacro withtauri_types::generate_invoke.
...
// .invoke_handler(tauri::generate_handler![
.invoke_handler
.run
.expect;
...
- Import
invokefrom thetauri-types.ts, instead of directly fromtauri.
// import { invoke } from '@tauri-apps/api/tauri';
import { invoke } from './tauri-types';
- Enjoy your type-safe
invoke.
Known dislike
You will need to always use the second argument, even if it's undefined. I'm still trying to figure out a way to disable that, but for now just set it to undefined.
Example:
import { invoke } from './tauri-types';
async function main() {
// This **WILL** give a typescript error, for now
// const user = await invoke('get_user');
// This **WILL** work fine
const user = await invoke('get_user', undefined);
console.log('User:', user);
}
Additional features
Export types with the same name under different namespaces:
That's going to generate this in your tauri-types.ts file.
export namespace db {
export type User = {
name: string;
username: string;
password: string;
age: number;
};
}
Use custom type path for a function argument:
If the type you want is in another namespace or you want to explicitly type it to something else, you can use this feature.
Use custom type path for a function return type:
If the type you want is in another namespace or you want to explicitly type it to something else, you can use this feature.
Issues
If there are any issues, open one in the Issues tab on GitHub.
Just be sure that there isn't one like yours already opened!
This is a very side project for me, but I'll try to keep it working.