Sequelize i Node.js med TypeScript - Klassens konstruktør Model kan ikke kalles uten 'new'


Jeg prøver å bruke Sequelize i Node.js + TypeScript. Jeg prøver å bruke følgende enkle kode:

import {Sequelize, Model, DataTypes} from 'sequelize';

const sequelize = new Sequelize('base', 'user', 'pass', {dialect: 'mysql'});

class User extends Model {
}
User.init({
    id: {
        type: DataTypes.INTEGER.UNSIGNED,
        autoIncrement: true,
        primaryKey: true,
        unique: true,
    },
    login: {
        type: DataTypes.STRING(255),
        allowNull: false,
        unique: true,
    },
    password: {
        type: DataTypes.STRING(255),
        allowNull: false,
    },
}, {
    tableName: 'users',
    sequelize,
});

sequelize.sync().then(() => {
    User.create({
        login: 'aaaa',
        password: 'bbbb',
    });
});

Men når jeg prøver å kjøre kompilert kode, får jeg følgende feil:

Ubehandlet avvisning TypeError: Klassekonstruktør Model kan ikke kalles uten 'new'

Så vidt jeg forstår, er dette ikke et problem med sequelize: samme kode kjørt som JavaScript-kode fungerer uten problem og oppretter poster i riktige tabeller i databasen. Jeg vet at dette er et problem med å transpile ES6-klasser til ES5, men jeg får ikke fikset denne feilen. Dette er min tsconfig.json:

{
  "compilerOptions": {
    "experimentalDecorators": true,
    "outDir": "./dist",
    "noImplicitAny": true,
    "noImplicitReturns": true,
    "module": "esnext",
    "target": "es5",
    "sourceMap": true,
    "moduleResolution": "node",
    "lib": ["es5", "dom", "esnext"],
    "jsx": "react",
    "typeRoots": ["./common/typings", "./node_modules/@types"]
  },
  "exclude": [
    "node_modules"
  ]
}

Fra det jeg har lest i lignende spørsmål på Stackoverflow og forskjellige nettsteder på internett, bør det å endre mål i kompilatorinnstillingene til ES6 løse problemet, men selv etter en slik endring oppstår problemet fortsatt. Jeg begynner å gå tom for ideer om hva jeg har gjort galt her, så hjelp vil bli svært verdsatt.

Svar #1

Gå til tsconfig.json-filen. Deretter endrer du target til es6 som i eksemplet nedenfor:

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "declaration": true,
    "outDir": "./lib",
    "strict": true
  },
  "include": ["src"],
  "exclude": ["node_modules", "**/__tests__/*"]
}

Svar #2

prøv å endre target til "ES2017" i tsconfig.json. løste problemet for meg.

Relaterte artikler