TypeScript/Knex: Cannot use import statement outside a module

I'm a newbie to TypeScript and currently using Knex to build a template table in our PostgreSQL database. On this file and others and am continually running in to this same issue with TypeScript, code is as follows:

import * as Knex from 'knex';


exports.up = async (knex: Knex): Promise<void> => {
    await knex.schema.raw(`
    CREATE TABLE test (
        test TEXT NOT NULL,
        tes2  INTEGER NOT NULL,
        PRIMARY KEY (key, website)
    ) 
`);
}


exports.down = async (knex: Knex): Promise<void> => {
    await knex.schema.dropTable('test');
}

and I get this error:

import * as Knex from 'knex';
^^^^^^

SyntaxError: Cannot use import statement outside a module

I have also tried these varients:

   import * as Knex = require('knex');
   import { * as Knex } from 'knex';
   const * = require('knex');
   const { * as Knex } = require('knex');

But I cannot find any solution online which seems to solve the problem.

Any help on this would be awesome.


Solution 1:

This error can occur if you setup knex without specifying you'll be using typescript.

Make sure you use the following command to initialize knex, if you're creating typescript migrations:

knex init -x ts