Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
392 views
in Technique[技术] by (71.8m points)

javascript - 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.

question from:https://stackoverflow.com/questions/65883600/typescript-knex-cannot-use-import-statement-outside-a-module

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You're mixing two different kinds of modules. import/export is JavaScript standard module syntax ("ESM" for "ECMAScript Module"), but assigning to properties on exports is CommonJS module syntax (aka "CJS"). You need to use one or the other, and if you're using ESM, you need to tell Node.js that by using "type": "module" in package.json or using the .mjs file extension?— or, since you're using TypeScript, you might want "module": "ES2020" or similar (more here).

The error tells us that Node.js and/or TypeScript think you're using CJS. If you want to keep doing that, it would probably be:

const Knex = require("knex");

...but see the documentation, as they show calling that export as a function. (Perhaps you're doing that later.)


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...