导入语句不适用于打字稿

时间:2019-12-05 13:53:57

标签: javascript typescript

我阅读了有关javascript中导入和导出声明的信息。然后,我尝试使用'import'关键字将类导入文件中。但是,尽管已经了解了node.js中模块的声明,但是在执行节点时还是会出错。

我的index.ts:

import Server from "./classes/server";
import router from './routes/router';

const server = new Server();

server.app.use('/', router);

server.start(() => {
    console.log("server starting!");
})

我的课程/server.ts

import { SERVER_PORT } from './../global/enviroment';
import express from 'express';

class Server {
    public app: express.Application;
    public port: number;

    constructor(){
        this.app = express();
        this.port = SERVER_PORT;
    }

    start(callback: any){
        this.app.listen(this.port, callback);
    }
}
export default Server;

我的package.json

enter image description here

但是当我尝试运行npm run start ...

enter image description here

3 个答案:

答案 0 :(得分:0)

据我所知,您还不能在node js中使用import语句。但是您可以使用实验功能(.mjs文件)。

This article详细介绍了模块/文件的导入。

答案 1 :(得分:0)

如果要使用import/export语法,则有以下选择:

  • 使用节点的本机实验ES模块
  • 使用esm npm软件包
  • 使用babel或类似工具转换为commonjs。

使用节点的本机ES模块:

将此添加到您的package.json:

{
  "type": "module"
}

并将启动脚本更改为:"start": "node index.js"(假设您正在使用节点> v13.3.0)。如果您使用的是节点v12或更高版本,则可以尝试:node --experimental-modules index.js

使用esm软件包:

此处的文档:https://github.com/standard-things/esm


不过,您需要先将.ts文件编译为.js文件。有关具体操作,请参见TypeScript docs

答案 2 :(得分:0)

您的tsconfig.json怎么样?

我假设您缺少一些配置,该配置可将打字稿文件编译为节点可以运行的兼容javascript,这是tsconfig.json应该正常工作的示例

{
  "compilerOptions": {
    "module": "commonjs",
    "moduleResolution": "node",
    "preserveConstEnums": true,
    "strict": true,
    "target": "es2017",
}

因此,从本质上讲,您将需要具有moduleResolutionnode https://www.typescriptlang.org/docs/handbook/module-resolution.html

也不要忘记节点未运行ts文件,您需要先编译然后再使用tsc。或者,如果您愿意,可以随时运行npx ts-node index.ts

编辑

ts-node的作用是首先将代码从ts编译为js,然后使用生成的js运行它,您可以查看有关ts节点https://github.com/TypeStrong/ts-node的更多信息。

如果您想避免使用ts-node,则始终可以先使用npx tsc进行编译,而node index.js是来自Typescript的编译器,一旦有了javascript,就可以运行node .或仅运行{{1} }。 请注意,您必须使用ts配置上的outDir检查js文件的输出文件夹,如果缺少outDir配置,则会在ts存在的相同位置添加js文件 https://www.typescriptlang.org/docs/handbook/compiler-options.html