define.ts
1.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import { BuildOptions, DataTypes, Model, Optional } from 'sequelize';
import { sequelize } from './connection';
// I really wouldn't recommend this, but if you want you can still use define() and interfaces
interface UserAttributes {
id: number;
username: string;
firstName: string;
lastName: string;
}
interface UserCreationAttributes extends Optional<UserAttributes, 'id'> {}
interface UserModel
extends Model<UserAttributes, UserCreationAttributes>,
UserAttributes {}
const User = sequelize.define<UserModel>(
'User',
{
id: { type: DataTypes.NUMBER, primaryKey: true },
username: DataTypes.STRING,
firstName: DataTypes.STRING,
lastName: DataTypes.STRING,
},
{ tableName: 'users' },
);
async function test() {
const user: UserModel = new User() as UserModel;
const user2: UserModel | null = await User.findOne();
if (!user2) return;
user2.firstName = 'John';
await user2.save();
}
// The below doesn't define Attribute types, but should still work
interface UntypedUserModel extends Model, UserAttributes {}
type UntypedUserModelStatic = typeof Model & {
new (values?: keyof any, options?: BuildOptions): UntypedUserModel;
customStaticMethod(): unknown;
};
const UntypedUser = sequelize.define<UntypedUserModel>(
'User',
{
id: { type: DataTypes.NUMBER, primaryKey: true },
username: DataTypes.STRING,
firstName: DataTypes.STRING,
lastName: DataTypes.STRING,
},
{ tableName: 'users' },
) as UntypedUserModelStatic;
UntypedUser.customStaticMethod = () => {};
async function testUntyped() {
UntypedUser.customStaticMethod();
const user: UntypedUserModel = new UntypedUser() as UntypedUserModel;
const user2: UntypedUserModel | null = await UntypedUser.findOne();
if (!user2) return;
user2.firstName = 'John';
await user2.save();
}