【发布时间】:2025-12-12 20:00:01
【问题描述】:
我写了一个与 ASP.NET MVC 结构类似的基础,并在我的 github 上发布 (express-mvc)。一切都很好,但我不能在request 对象内投射body 以适应任何界面。
这正是我想要的:
export default interface Post {
title: string
body: string
}
import Post from '@models/user'
router.post("/post", (req: Request, res: Response) => {
const Model: Post = req.body
})
但在运行时没有工作接口,因为 JavaScript 上没有接口。当我使用它时,将在 JavaScript 中输出
const Model;
Model = req.body
这样的话,它会将接口的非成员属性分配给我的变量。
简而言之,我想知道Model 变量中的接口属性。
我正在使用解构来临时解决这个项目中的问题
import Post from '@models/user'
router.post("/post", (req: Request, res: Response) => {
const { title, body }: Post = req.body
const Model: Post = <Post>{
title,
body
};
})
你有什么建议
用类解决问题
function castByBody<Model>(source: {}, modelProperties: any[]): Partial<Model> {
const post: Partial<Model> = {};
for (const key of modelProperties) {
post[key] = source[key];
}
return post;
}
class User {
public first_name: string = null
public username: string = null
public email: string = null
public password: string = null
public age: number = null
}
let user = new User() // create new instance
let userProperties: any[] = Object.getOwnPropertyNames(user) // get all properties from instance
const reqBody = {
first_name: "afulsamet",
username: "aful",
email: "afulsamet@gmail.com",
password: "333222233",
title: "member",
age: 18
} // user instance does not have title property
const model: Partial<User> = castByBody<User>(reqBody, userProperties);
console.log(model)
输出将与控制台中的一样
{
age: 18
email: "afulsamet@gmail.com"
first_name: "afulsamet"
password: "333222233"
username: "aful"
}
【问题讨论】:
-
请不要boldface每第三 字你的问题。它使 it 很难 阅读。
标签: javascript node.js typescript express