Skip to content

Commit

Permalink
fix(types): specified 'this' for getters and setters in fields (#12370)
Browse files Browse the repository at this point in the history
  • Loading branch information
knoid committed Jun 14, 2020
1 parent 41237ae commit 7fba668
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 8 deletions.
12 changes: 6 additions & 6 deletions types/lib/model.d.ts
Expand Up @@ -1265,7 +1265,7 @@ export interface ModelAttributeColumnReferencesOptions {
/**
* Column options for the model schema attributes
*/
export interface ModelAttributeColumnOptions extends ColumnOptions {
export interface ModelAttributeColumnOptions<M extends Model = Model> extends ColumnOptions {
/**
* A string or a data type
*/
Expand Down Expand Up @@ -1346,23 +1346,23 @@ export interface ModelAttributeColumnOptions extends ColumnOptions {
* Provide a custom getter for this column. Use `this.getDataValue(String)` to manipulate the underlying
* values.
*/
get?(): unknown;
get?(this: M): unknown;

/**
* Provide a custom setter for this column. Use `this.setDataValue(String, Value)` to manipulate the
* underlying values.
*/
set?(val: unknown): void;
set?(this: M, val: unknown): void;
}

/**
* Interface for Attributes provided for a column
*/
export interface ModelAttributes {
export interface ModelAttributes<M extends Model = Model> {
/**
* The description of a database column
*/
[name: string]: DataType | ModelAttributeColumnOptions;
[name: string]: DataType | ModelAttributeColumnOptions<M>;
}

/**
Expand Down Expand Up @@ -1612,7 +1612,7 @@ export abstract class Model<T = any, T2 = any> extends Hooks {
* string or a type-description object, with the properties described below:
* @param options These options are merged with the default define options provided to the Sequelize constructor
*/
public static init<M extends Model = Model>(this: ModelCtor<M>, attributes: ModelAttributes, options: InitOptions<M>): void;
public static init<M extends Model = Model>(this: ModelCtor<M>, attributes: ModelAttributes<M>, options: InitOptions<M>): void;

/**
* Remove attribute from model definition
Expand Down
14 changes: 12 additions & 2 deletions types/test/model.ts
Expand Up @@ -29,7 +29,17 @@ MyModel.findOne({ include: ['OtherModelAlias'] });

const sequelize = new Sequelize('mysql://user:user@localhost:3306/mydb');

MyModel.init({}, {
MyModel.init({
virtual: {
type: new DataTypes.VIRTUAL(DataTypes.BOOLEAN, ['num']),
get() {
return this.getDataValue('num') + 2;
},
set(value: number) {
this.setDataValue('num', value - 2);
}
}
}, {
indexes: [
{
fields: ['foo'],
Expand Down Expand Up @@ -71,4 +81,4 @@ UserModel.findCreateFind({
* Test for primaryKeyAttributes.
*/
class TestModel extends Model {};
TestModel.primaryKeyAttributes;
TestModel.primaryKeyAttributes;

0 comments on commit 7fba668

Please sign in to comment.