【发布时间】:2018-02-19 08:36:58
【问题描述】:
假设我有一个用户对象:
export class User {
@Column()
public email: string;
@Column({ nullable: true })
public name: string;
@Column({ nullable: true })
public birthDate: Date;
@OneToMany(type => Article, article => article.author)
public articles: Promise<Article[]>;
}
我可以使用以下界面创建带有类型信息的部分选择:
export interface Seed<T> {
rows: {[K in keyof T]?: T[K]}[];
}
问题如下:通过这种方法,我看到了实体的所有关系,所以我必须使类的键选择部分接受种子,例如:
const USER_SEED: Seed<User> = {
email: test@mail.com,
name: 'Johny Test',
birthDate: new Date('1990-01-08'),
}
这可能会导致不正确的种子,其中未提供不可为空的字段或提供了表中不存在的字段,因为它是一个关系。
我的问题是如何创建具有所选类型的键选择?在这种情况下,我会选择字符串、数字和日期类型的键
【问题讨论】:
-
如果属性可以为空,为什么不在类定义中将其标记为空?
-
有
createdAt或主键之类的字段,一直存在,但在为数据库做种时不需要,因为它是计算出来的。 -
您可能将
rows键入为Array<Partial<User> & Pick<User, "name" | "email">>,其中“name”和“email”是唯一的非空属性。但是您必须手动更新非空列。 -
我尽量避免手动操作。
-
不应该用
rows属性初始化USER_SEED吗?
标签: typescript generics