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 Types
to 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::command
macro 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_handler
macro withtauri_types::generate_invoke
.
...
// .invoke_handler(tauri::generate_handler![
.invoke_handler
.run
.expect;
...
- Import
invoke
from 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.