#tauri #tauri-app #tauri-type-macros

tauri-types

Tauri应用类型生成宏

2个版本

0.0.2 2023年8月15日
0.0.1 2023年8月9日

过程宏 中排名第503

Apache-2.0 OR MIT

21KB
502

Tauri Types

一个小型库,将Rust类型转换为TypeScript类型,以便更好地集成Tauri的invoke函数。

在以下网站上查看

用法

  1. Tauri Types添加到您的项目中。
cargo add tauri-types
  1. 将派生添加到您想在JavaScript程序中访问的类型。它可以是结构体或枚举。
use tauri_types::TauriType;

#[derive(TauriType)]
struct User {
  name: String,
  username: String,
  password: String,
  age: u32,
}

这将在您的tauri-types.ts文件中生成以下内容。

export type User = {
  name: string;
  username: string;
  password: string;
  age: number;
};

您可以通过从tauri-types.ts文件导入来使用此类型。

import { type User } from './tauri-types';
  1. 在您想要导出的任何函数上方添加tauri_types::command宏。
#[tauri_types::command]
fn get_user() -> User {
  return User {
    name: "Marko".to_string(),
    username: "Maki325".to_string(),
    password: "YoullNeverGuessIt".to_string(),
    age: 20,
  }
}

(您可以使用use tauri_types::command;来导出它,但最好这样使用,以免与tauricommand宏冲突。)

  1. tauri::generate_handler宏替换为tauri_types::generate_invoke
...
// .invoke_handler(tauri::generate_handler![
.invoke_handler(tauri_types::generate_invoke![
  get_user,
])
.run(tauri::generate_context!())
.expect("error while running tauri application");
...
  1. tauri-types.ts导入invoke,而不是直接从tauri导入。
// import { invoke } from '@tauri-apps/api/tauri';
import { invoke } from './tauri-types';
  1. 享受您类型安全的invoke

已知不喜欢

即使第二个参数是 undefined,您也需要始终使用它。我仍在尝试找出禁用它的方法,但到目前为止,只需将其设置为 undefined.

示例

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);
}

额外功能

在不同的namespaces下导出具有相同名称的类型
#[derive(TauriType)]
#[namespace = "db"]
struct User {
  name: String,
  username: String,
  password: String,
  age: u32,
}

这将在您的tauri-types.ts文件中生成以下内容。

export namespace db {
  export type User = {
    name: string;
    username: string;
    password: string;
    age: number;
  };
}
为函数参数使用自定义类型路径

如果您想要的是另一个namespace中的类型或您想将其显式地类型化为其他类型,您可以使用此功能。

#[tauri_types::command]
fn get_username(
  #[path = "db.User"]
  user: User
) -> String {
  return user.username;
}
为函数返回类型使用自定义类型路径

如果您想要的是另一个namespace中的类型或您想将其显式地类型化为其他类型,您可以使用此功能。

#[tauri_types::command]
#[return_path = "db.User"]
fn get_user() -> User {
  return User {
    name: "Marko".to_string(),
    username: "Maki325".to_string(),
    password: "YoullNeverGuessIt".to_string(),
    age: 20,
  }
}

问题

如果有任何问题,请打开GitHub上的Issues选项卡中的一个。请确保尚未打开类似的问题!

这对于我来说是一个非常重要的副项目,但我将尽力保持它运行。

依赖项

约275–720KB
约17K SLoC