node.js - sequelize-typescript:模型中 get() 的常用方法
问题描述
我为 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 在运行时所做的事情(I'我不熟悉它)。
推荐阅读
- javascript - 突出显示 div 中的特定字符串
- c# - 如何创建可以生成自己的字段和新面板的 ASP.NET C#?
- python - 使用循环连接数据框的列 - Python
- javascript - 将几个文本字段中的值传递到第三个(生成用户名)HTML、JS
- android - Android Studio:生成主 dex 列表时出错
- javascript - 使用 Node.js 重命名文件
- html - 由于某种原因,我的 scss 文件不会加载到 github html 页面上
- java - 如何在 Java 中检查 Integer 的泛型类型“T”?
- gradle - 如何通过 Gradle 任务运行 JMeter GUI?
- python - 如何在 csv 文件中使用 panda 中的条件?