迁移指南
从 Ky 迁移
从手动调用 ky 迁移到 worma 生成的类型安全调用代码
如果你的项目当前直接使用 ky 手写接口调用,可以借助 worma 从 OpenAPI 规范生成类型安全的调用代码。底层依然是标准 ky,因此兼容性极好,你原有的 ky 请求可以完全保留,无需一次性迁移。
迁移前:手写 ky 调用
import ky from 'ky';
interface User {
id: number;
name: string;
email: string;
}
const users = await ky
.get('api/users', { searchParams: { page: 1, size: 10 } })
.json<User>();
const created = await ky
.post('api/users', { json: { name: 'Alice', email: 'alice@example.com' } })
.json<User>();迁移步骤
使用 init 创建配置文件
npx wormajs init --template ky该命令会在项目根目录生成 worma.config.ts(或 .js),已默认选用 ky 模板。也可以不传 --template,在交互式菜单中选择 ky。
使用 gen 生成调用代码
npx wormajs gen生成结果位于 src/api/ky/ 下,每个 API 作为独立函数导出,支持 Tree-shaking:
index.ts
helper.ts
components.d.ts
user.ts
其中 index.ts 会创建一个默认的 kyInstance:
// src/api/ky/index.ts
import ky from 'ky';
export const kyInstance = ky.create({
prefix: 'https://api.example.com/',
});替换实例(唯一需要修改的地方)
迁移非常简单:只需从你已有的 ky 实例文件导入实例,在生成的 index.ts 中同名导出即可,其他文件无需任何修改。
// src/api/ky/index.ts
// 从你已有的 ky 实例文件导入,并同名(kyInstance)导出
export { myKy as kyInstance } from '@/lib/request';
@/lib/request即你项目中已配置好前缀、钩子等能力的 ky 实例文件,myKy为其导出名。这样services中引用的kyInstance直接指向你的实例,无需改动任何其它文件。
兼容性说明
worma 生成的调用代码底层就是标准 ky,因此兼容性极好,你原有的 ky 请求可以完全保留,可逐步迁移——将手写调用替换为生成的类型安全函数,与原有 ky.get/post 调用并行不冲突。
替换手写调用
// 迁移后:无需 .json(),返回类型由 OpenAPI 自动推导
import { getUserList, createUser } from './api/ky/services/user';
const users = await getUserList({ params: { page: 1, size: 10 } });
const created = await createUser({
data: { name: 'Alice', email: 'alice@example.com' },
});调用约定对照:
| 手写 ky | worma 生成函数 |
|---|---|
ky.get(url, { searchParams }) | fn({ params }) |
ky.post(url, { json }) | fn({ data }) |
ky.get(url, { searchParams: { id } }) | fn({ pathParams: { id } }) |
await ky.x().json<T>() | await fn(...) 直接返回 T |
生成的函数同样接受原生 ky 请求配置(如 timeout、headers、retry、signal 等)。
迁移检查清单
- 运行
worma init --template ky生成配置文件 - 运行
worma gen生成src/api/ky/ - 将
index.ts中的默认kyInstance替换为你的现有实例并导出(其余文件无需改动) - 按需将手写
ky.get/post调用替换为生成的类型安全函数,并把searchParams→params、json请求体 →data