You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Caveat with Public Class Fields
Adding a Public Class Field with the same name as one of the model's attribute is going to cause issues. Sequelize adds a getter & a setter for each attribute defined through Model.init. Adding a Public Class Field will shadow those getter and setters, blocking access to the model's actual data.
The models need a declare before the field name so the type can be specified without colliding with the inferred model getter/setter from the Sequelize base Model.
@Table({ tableName: "users", paranoid: true })
export class User extends Model {
saltRounds = 10;
@Column({ primaryKey: true })
guid: string;
@AllowNull(false)
@Column
firstName: string;
...
should be
@Table({ tableName: "users", paranoid: true })
export class User extends Model {
saltRounds = 10;
@Column({ primaryKey: true })
declare guid: string;
^^^^^^
@AllowNull(false)
@Column
declare firstName: string;
^^^^^^
...
The text was updated successfully, but these errors were encountered:
comment out the @column line for a simple fields called name on one of my models. That caused other spots in the model definition to crash when trying to access thing.name as undefined.
I then tried to just comment out the @column before the declare but left the declare in. This let me access thing.name but it was shadowing the setter/getter from sequelize so the value was not getting saved to db.
I will try to define a model without sequelize-typescript to see if I still get typed returns etc. I have to pick an easy one without many foreign keys and hooks.
Example models in this plugin will not work correctly with Sequelize v6 as per
https://sequelize.org/docs/v6/core-concepts/model-basics/#caveat-with-public-class-fields
Caveat with Public Class Fields
Adding a Public Class Field with the same name as one of the model's attribute is going to cause issues. Sequelize adds a getter & a setter for each attribute defined through Model.init. Adding a Public Class Field will shadow those getter and setters, blocking access to the model's actual data.
The models need a declare before the field name so the type can be specified without colliding with the inferred model getter/setter from the Sequelize base Model.
should be
The text was updated successfully, but these errors were encountered: