Smx*_*Cde 3 orm typescript typeorm
是否可以使用 TypeOrm 保留类型安全性来设置对象的字段值?
我在文档中找到的所有示例都建议您一一设置属性
const newUser = new User();
newUser.firstName = 'John'
newUser.lastName = 'Doe'
newUser.role = 'manager'
newUser.phone = '1234567890'
newUser.login = 'john.doe'
newUser.password = '12345'
newUser.save();
Run Code Online (Sandbox Code Playgroud)
如果我可以这样设置字段,那就更好了:
const newUser = new User();
newUser.setFields({
firstName: 'John',
lastName: 'Doe',
role: 'manager',
phone: '1234567890',
login: 'john.doe',
password: '12345'
}
);
newUser.save();
Run Code Online (Sandbox Code Playgroud)
它将允许使用快捷方式
const newUser = new User();
newUser.setFields({
firstName,
lastName,
role,
phone,
login: 'john.doe',
password: '12345'
}
);
newUser.save();
Run Code Online (Sandbox Code Playgroud)
并使用组合
const newUser = new User();
newUser.setFields({
firstName,
lastName,
role,
phone,
...credentials
}
);
newUser.save();
Run Code Online (Sandbox Code Playgroud)
尽管我找不到任何方法可以做到这一点。
我知道您需要有一个描述对象形状的类型才能实现它,但我希望 TS/TsOrm 能够以某种方式从我定义的模型中派生它。
实体或存储库的and方法(取决于您的实现)将是您最有可能寻找的create:merge
const userEntity = UserEntity.create({ firstName, lastName, ...someOtherStuff });
const mergedEntity = UserEntity.merge(mergedEntity, { lastName: "new last name" });
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅文档并向下滚动到提到的方法,其中包括以下示例:
const user = repository.create(); // same as const user = new User();
const user = repository.create({
id: 1,
firstName: "Timber",
lastName: "Saw"
}); // same as const user = new User(); user.firstName = "Timber"; user.lastName = "Saw";
const user = new User();
repository.merge(user, { firstName: "Timber" }, { lastName: "Saw" });
// same as user.firstName = "Timber"; user.lastName = "Saw";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4145 次 |
| 最近记录: |