sli*_*wp2 5 graphql graphql-js
我使用mongoose,typescript并graphql构建我的应用。
我是全栈开发人员。
问题是我定义字段类型的模型FIVE倍。
服务器端:
models/book.ts:
// first time
interface IBook extends mongoose.Document {
title: string;
author: string;
}
// second time
const bookSchema = new mongoose.Schema({
title: String,
author: String
})
const Book: mongoose.Model<IBook> = mongoose.model<IBook>('Book', bookSchema)
Run Code Online (Sandbox Code Playgroud)
graphql/typeDefs.ts
const typeDefs = `
// third time
type Book {
title: String!
author: String!
}
// fourth time
input BookInput {
title: String!
author: String!
}
`
Run Code Online (Sandbox Code Playgroud)
客户端:
interfaces/book.ts
// fifth time
interface IBook {
title: string;
author: string;
}
Run Code Online (Sandbox Code Playgroud)
如你看到的。的title和author字段和类型被定义FIVE倍。
有三个主要缺点:
有办法解决吗?我认为这几乎是一个DRY问题。
这是我的想法:
做一个工具来处理这个。
制作一个项目生成器或命令行工具,例如ng-cli用于静态生成模型和类型,这意味着在运行时之前
在运行时动态定义模型decorator或syntax sugar动态生成模型和类型
我们最近遇到了这个问题,要求我们在 Mongoose 模式旁边维护一个重复的 Typescript 接口(对我们来说,这个问题只是服务器端的,因为我们没有使用 graphql 或客户端 Typescript)
我们构建了mongoose-tsgen来解决这个问题。它可能无法处理此处涉及的所有情况,但可以轻松引导来处理您的用例。
它读取您的 Mongoose 模式并生成一个index.d.ts文件,其中包含每个文档和子文档的接口。这些接口可以直接从 mongoose 模块导入,如下所示:
import { IUser } from "mongoose"
async function getUser(uid: string): IUser {
// `user` is of type IUser
const user = await User.findById(uid)
return user;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
310 次 |
| 最近记录: |