考虑一个简单的用户集合:
// db.ts
export interface User {
_id: mongodb.ObjectId;
username: string;
password: string;
somethingElse: string;
}
// user.ts
import {User} from "../db"
router.get("/:id", async (req, res) => {
const id = req.params.id;
// user._id is a mongodb.Object.
const user: User = await db.getUser(id);
res.send(user);
});
// index.ts
// code that will runs on browser
import {User} from "../../db"
$.get('/user/...').done((user: User) => {
// user._id is string.
console.log(user._id);
});
在我想在客户端代码中使用此接口(interface)之前,它可以完美运行。因为用户的 _id
在从服务器作为 json 传输时变成了一个十六进制字符串。如果我将 _id
设置为 mongodb.ObjectId |字符串
,行为变得奇怪。
最佳答案
您可以尝试以巧妙的方式将它们分开:
interface User {
username: string;
password: string;
somethingElse: string;
}
export interface UserJSON extends User {
_id : string
}
export interface UserDB extends User {
_id : mongodb.ObjectId
}
然后采用 UserJSON(客户端)或 UserDB(服务器端)。
关于mongodb - 使用 Typescript 和 Mongodb 应该如何定义文档的接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37157994/