sequelize-typescript:模型中get()的通用方法

时间:2018-08-29 21:33:20

标签: node.js typescript model sequelize.js

我在START_DATE,END_DATE,MEET_START_DATE,MEET_END_DATE定义了一些get()函数。如果您仔细查看为这些列定义的get()函数,它们将非常相似。所以我试图为所有这些get()函数定义一个通用函数。与最后定义的getDay()类似的函数。但是我不能从get()方法中调用getDay()。我没有访问权限。 如何从get()函数或类似的函数中调用getDay()?我还需要传递参数,以便可以访问字段名称和实例。

Series

1 个答案:

答案 0 :(得分:0)

最简单的方法是在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强制转换为{{1} }放在Person实现中,具体取决于运行时续集的工作方式(我不熟悉)。