【发布时间】:2020-07-17 07:13:58
【问题描述】:
我遇到过这种类型的 ModelFields,我仍在尝试理解它。
type ModelFields<T> = Partial<Omit<T, keyof BaseModel>> & {
created_at?: Date;
updated_at?: Date;
};
我理解 Partial,所有属性都是可选的。我理解 &(类型的交集)。
让我们从 keyof BaseModel 开始,其计算结果为:
"created_at" | "updated_at" | "modelName" | "primaryKey" | "columnIndexes" | "modelFields" | "indexes" | "findById
典型用法是在 findby 中返回 ModelFields。
所以在ModelFields类型的构造中。那里做了很多事情。选择 T 的属性后,为什么排除 BaseModel 的键?任何人都可以为试图理解 TypeScript 以掌握排除 BaseModel 键的原因的人分解这一点
class BaseModel {
created_at?: Date;
updated_at?: Date;
constructor() {}
get modelName(): string {
}
get primaryKey(): FieldOptions | undefined {
}
get columnIndexes(): {[key: number]: Array<FieldOptions>;} {
}
get modelFields(): FieldOptions[] {
}
get indexes(): Index[] {
}
async findById(id: string | number): Promise<ModelFields<this> | undefined> {
}
}
另一种典型用法:
class AddressModel extends BaseModel {
id!: number;
address!: string;
}
class UserModel extends BaseModel {
id!: number;
nickName?: string;
password?: string;
defaultVal?: string;
address?: ModelFields<AddressModel>;
}
【问题讨论】:
标签: typescript generics