我是 TypeScript 的新手,目前正在使用 Knex 在我们的 PostgreSQL 数据库中构建模板表。在这个文件和其他文件上,我不断遇到与 TypeScript 相同的问题,代码如下:
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');
}
我收到此错误:
import * as Knex from 'knex';
^^^^^^
SyntaxError: Cannot use import statement outside a module
我也尝试过这些变体:
import * as Knex = require('knex');
import { * as Knex } from 'knex';
const * = require('knex');
const { * as Knex } = require('knex');
但是我在网上找不到任何似乎可以解决问题的解决方案。
对此的任何帮助都会很棒。
答案 0 :(得分:0)
您正在混合两种不同类型的模块。 import
/export
是 JavaScript standard module syntax(“ECMAScript 模块”的“ESM”),但分配给 exports
上的属性是 CommonJS module syntax(又名“CJS”) .您需要使用其中一个,如果您使用 ESM,您需要通过在 "type": "module"
中使用 package.json
或使用 .mjs
文件扩展名来告诉 Node.js — 或,因为您使用的是 TypeScript,所以您可能需要 "module": "ES2020"
或类似的 (more here)。
该错误告诉我们 Node.js 和/或 TypeScript 认为您正在使用 CJS。如果您想继续这样做,可能是:
const Knex = require("knex");
...但是 see the documentation,因为它们显示将该导出作为函数调用。 (也许您稍后会这样做。)
答案 1 :(得分:0)
如果您设置 knex 而没有指定您将使用打字稿,则可能会发生此错误。
如果您要创建 typescript 迁移,请确保使用以下命令初始化 knex:
knex init -x ts