不要怂,就是干,撸起袖子干!

Commit 7fba6684 by Ariel Barabas Committed by GitHub

fix(types): specified 'this' for getters and setters in fields (#12370)

1 parent 41237ae1
Showing with 18 additions and 9 deletions
......@@ -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
*/
......@@ -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>;
}
/**
......@@ -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
......
......@@ -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'],
......@@ -71,4 +81,4 @@ UserModel.findCreateFind({
* Test for primaryKeyAttributes.
*/
class TestModel extends Model {};
TestModel.primaryKeyAttributes;
\ No newline at end of file
TestModel.primaryKeyAttributes;
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!