跳到正文
灵动桌面框架
Esc
本栏目菜单

TypeScript 类型

灵动桌面框架的 TypeScript 类型定义,位于 src/types/ 目录(按模块拆分为 config.ts、system.ts,由 src/types/index.ts 统一导出)。对应的 Rust 结构体在 src-tauri/src/models/mod.rs。

import type { AppConfig, SystemInfo } from '@/types'

AppConfig

配置项数据结构(get_all_config 的元素类型)。

interface AppConfig {
  key: string
  value: string
}

app_config 表中虽有 created_at、updated_at、deleted_at 列,但查询只返回 key 与 value。

SystemInfo

系统信息数据结构(get_system_info 的返回值)。src/types/system.ts 中的定义:

interface SystemInfo {
  os: string
  arch: string
  appVersion: string
  dataDir: string
}

字段名与后端不一致

Rust 侧 SystemInfo 未加 #[serde(rename_all = "camelCase")],实际返回的 JSON 为:

{
  os: string          // std::env::consts::OS,如 "windows" / "macos" / "linux"
  arch: string        // std::env::consts::ARCH,如 "x86_64" / "aarch64"
  app_version: string // 应用版本
  data_dir: string    // 应用数据目录,取不到时为 "unknown"
}

因此按上面的 TS 类型读取 appVersion / dataDir 会得到 undefined。二选一对齐:给 Rust 结构体加 #[serde(rename_all = "camelCase")],或把 TS 字段改成 snake_case。

CommandError

命令失败时的错误结构,定义在 src/lib/api/client.ts,经 @/lib/api 导出。

interface CommandError {
  code: string
  message: string
}

错误码见 错误码速查。

类型对照

前后端类型必须严格对齐,字段名也一样(serde 默认不改名):

RustTypeScript示例
Stringstring文本内容
i64numberID、计数
boolboolean开关标志
Vec<T>T[]列表
Option<T>T | null可空值
()void无返回值