6.6.514.17.64.4.3sqlite Al usar mecanografiado y getters/setters, si la columna DataType no coincide con el tipo de interfaz/atributo, mecanografiado genera un error.
Ejemplo:
interface IUserAttributes { id: number; registeredAtIp: string; } interface IUserCreationAttributes extends Optional<IUserAttributes, 'id'> {} class User extends Model<IUserAttributes, IUserCreationAttributes> implements IUserAttributes { public id!: number; public registeredAtIp!: string; } User.init( { id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true, unique: true, }, registeredAtIp: { type: DataTypes.INTEGER, allowNull: false, get(): string { return int2Ip(this.getDataValue("registeredAtIp")); // ^ // Argument of type 'string' is not assignable to parameter of type 'number'.ts(2345) // this: User }, set(newIp: string): void { this.setDataValue("registeredAtIp", ip2Int(newIp)); // ^ // Argument of type 'number' is not assignable to parameter of type 'string'.ts(2345) // (alias) ip2Int(ip: string): number // import ip2Int }, }, }, { sequelize, tableName: "users" } ); ¿No debería getDataValue devolver el number ya que la columna DataType es INTEGER y no una cadena?
Establecer el tipo de interfaz en número corrige el error, pero no puedo crear un usuario que tenga la propiedad como una cadena.
Quiero saber cómo detener el error, también conocido como this.getDataValue('registeredAtIp') debe ser del tipo número.
NOTA: Ya sé que puedo hacer as unknown as number pero no debería tener que hacer tal cosa.
Preguntado en github: https://github.com/sequelize/sequelize/issues/13522