我在START_DATE,END_DATE,MEET_START_DATE,MEET_END_DATE定义了一些get()函数。如果仔细观察为这些列定义的get()函数,它们非常相似。所以我试图为所有这些get()函数定义一个通用函数。一个类似于最后定义的getDay()的函数。但是我无法在get()方法中调用getDay()。我无法访问它。如何从get()函数或类似的东西调用getDay()?我还需要传递参数,以便我可以访问字段名称和实例。
import {Table, Column, Model, DataType} from 'sequelize-typescript';
@Table({
timestamps: false,
freezeTableName: true,
schema: 'TEST',
tableName: 'Person'
})
export class Person extends Model<Person> {
@Column({ type: DataType.STRING, primaryKey: true })
ID: string;
@Column(DataType.STRING)
NAME: string;
@Column({type:DataType.DATEONLY,
get(){
let value : Date = this.getDataValue('START_DATE');
return value.getDay();
}})
START_DATE: Date;
@Column({type:DataType.DATEONLY,
get(){
let value : Date = this.getDataValue('END_DATE');
return value.getDay();
}})
END_DATE: Date;
@Column({type:DataType.DATEONLY,
get(){
let value : Date = this.getDataValue('MEET_START_DATE');
return value.getDay();
}})
MEET_START_DATE: Date;
@Column({type:DataType.DATEONLY,
get(){
let value : Date = this.getDataValue('MEET_END_DATE');
return value.getDay();
}})
MEET_END_DATE: Date;
getDay(field,instance) {
let value : Date = instance.getDataValue(field);
return value.getDay();
}
}
最简单的方法是在Person
类之外定义你的常用函数:
import {Table, Column, Model, DataType} from 'sequelize-typescript';
function getDayOfField(field: string, instance: Model<any>) {
let value : Date = instance.getDataValue(field);
return value.getDay();
}
@Table({
timestamps: false,
freezeTableName: true,
schema: 'TEST',
tableName: 'Person'
})
export class Person extends Model<Person> {
@Column({ type: DataType.STRING, primaryKey: true })
ID: string;
@Column(DataType.STRING)
NAME: string;
@Column({type:DataType.DATEONLY,
get(){ return getDayOfField('START_DATE', this); }})
START_DATE: Date;
@Column({type:DataType.DATEONLY,
get(){ return getDayOfField('END_DATE', this); }})
END_DATE: Date;
@Column({type:DataType.DATEONLY,
get(){ return getDayOfField('MEET_START_DATE', this); }})
MEET_START_DATE: Date;
@Column({type:DataType.DATEONLY,
get(){ return getDayOfField('MEET_END_DATE', this); }})
MEET_END_DATE: Date;
}
(定义并将其称为Person
的静态方法将大致相同。)如果你真的想让它成为一个实例方法,你可以尝试在你的this
实现中将Person
转换为get
,这可能会起作用取决于sequelize在运行时(我不熟悉它)。