我在我的应用程序中使用 API 端点路由。在这些端点中,有关数据的 http 请求由后端在 PRISMA ORM 的帮助下进行处理。
但是,我必须在前端使用其他东西,并开始编写类似于我的后端类型的打字稿类型。对于像 Haskell 或其他类型语言这样的编程语言来说,这是非常违反直觉的。
端点似乎位于中间,并且是未来可能出现的各种不兼容性的根源。因为现在我有 3 个故障点,端点、API 和前端打字稿类型(甚至在运行时都没有编译和可用。)
是否有更类型安全的方法来修复中间端点问题?
我看过几个不起眼的全栈项目,例如 Urweb 和不太晦涩的 Django,但它们缺乏表达性的模板语言,例如 Svelte 或 Vue。还有其他方法可以制作自动类型安全的 api 端点代码吗?
这似乎是一个单一事实来源的问题。有多种方法可以解决此类问题。
例如:您可以从模式生成类型(例如从 Swagger 或 Prisma 本身)。或者甚至从 Typeorm 等类型生成模式。
有
swagger-typescript-api
和 swagger-typescript-codegen
等工具可以生成用于执行请求并解析请求的代码
我不是通过在前端生成类型来解决问题的,而是通过
剩下的最大困难是保持前端、端点和后端的独立性和可维护性。
注:我是Remult的作者之一
您可以使用 Remult 从 TypeScript 模型类创建类型安全的 API 端点,而无需生成任何代码。它还具有一个 API 客户端,您可以直接从前端代码使用它来查询和操作数据,而无需任何辅助函数。
您可以通过在函数上使用 typeof 从对 prisma 的特定调用中获取类型:
export const loadJobs = async () => {
return await prisma.jobPost.findMany({
take: 5,
orderBy: {
postDate: 'desc'
},
where: {
published: true
},
include: {
address: true
}
});
};
type ThenArg<T> = T extends PromiseLike<infer U> ? U : T;
export type Jobs = ThenArg<ReturnType<typeof loadJobs>>;
有关此的更多信息可以找到:这里
了解棱镜类型:此处
这也可能是类似的问题:这里