我正在使用 Nextjs 作为前端,使用 Bun & hono 作为后端构建一个 monorepo。我正在尝试使用 hono rpc:https://hono.dev/docs/guides/rpc。我在后端项目的 app.ts 文件中导出路由器的类型,如下所示:
import createApp from '@/lib/create-app'
import configureOpenAPI from '@/lib/configure-open-api'
import index from '@/routes/index.route'
import users from '@/routes/user/user.index'
import connects from '@/routes/connects/connects.index'
const app = createApp()
const routes = [index, users, connects] as const
configureOpenAPI(app)
routes.forEach((route) => {
app.route('/', route)
})
export default app
export type AppType = (typeof routes)[number]
然后尝试将其导入到我的 client.ts 文件中的前端项目中
import type { AppType } from '../backend/src/app'
import { hc } from 'hono/client'
const client = hc<AppType>('http://localhost:8000')
export default client
这不起作用,我的类型被推断为任何类型。当我将鼠标悬停在后端 app.ts 中的应用程序类型上时 - 我看到这种类型
type AppType = OpenAPIHono<AppBindings, {
"/": {
$get: {
input: {};
output: {
message: string;
};
outputFormat: "json" | "text";
status: 200;
};
};
}, "/"> | OpenAPIHono<AppBindings, {
...;
}, "/"> | OpenAPIHono<...>
它 100% 具有正确的类型。
当我将鼠标悬停在 client.ts 中的 AppType 上时,我看到了以下内容:
(alias) type AppType = any
import AppType
如何解决这个问题:
自己查看的存储库+所有 tsconfig:https://github.com/charlietlamb/postpad
谢谢您的帮助!
终于回答了这个问题 - 需要补充
"references": [
{ "path": "../backend/tsconfig.json" }
],
到我的后端和
"composite" : true
在我的前端