javascript Import语句在typescript中不起作用

vdgimpew  于 2023-10-14  发布在  Java
关注(0)|答案(5)|浏览(171)

我读了JavaScript中的进出口声明。然后我尝试使用“import”关键字导入文件中的类。但是,尽管已经阅读了node.js中模块的声明,但在执行node时仍然会出现错误。
My 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

但是当我试着运行npm run start时。。

7ivaypg9

7ivaypg91#

你的tslog.json怎么样?
我假设您缺少一些配置,这些配置可以将typescript文件编译为node可以运行的兼容JavaScript,下面是一个应该可以工作的tsscript. json示例

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

因此,基本上您将需要moduleResolutionnodehttps://www.typescriptlang.org/docs/handbook/module-resolution.html
另外不要忘记node不运行ts文件,你需要先用tsc编译then。或者,如果您愿意,也可以始终运行npx ts-node index.ts

编辑

ts-node它的作用是首先将你的代码从ts编译成js,然后用生成的js运行it node,你可以查看关于ts node https://github.com/TypeStrong/ts-node的更多信息。
如果你不想使用ts-node,你可以先使用npx tsc编译,这是typescript的编译器,一旦你有了JavaScript,你可以运行node index.js或简单的node .。请注意,您必须使用ts配置上的outDir检查js文件的输出文件夹,如果outDir缺少配置,则会将js文件添加到与ts存在https://www.typescriptlang.org/docs/handbook/compiler-options.html相同的位置

rxztt3cl

rxztt3cl2#

如果你想使用import/export语法,你有以下选项:

  • 使用node的本地实验ES模块
  • 使用esm npm包
  • 使用babel或类似工具将其转换为commonjs。

使用node原生ES模块:

将此添加到您的包中。json:

{
  "type": "module"
}

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

使用esm包:

标签:https://github.com/standard-things/esm
你需要先把.ts文件编译成.js文件。请参阅TypeScript docs了解如何做到这一点。

pxq42qpu

pxq42qpu3#

据我所知,你还不能在node js中使用import语句。但是你可以使用实验特性(.mjs文件)。
This article详细解释了模块/文件导入。

6mzjoqzu

6mzjoqzu4#

我正在使用的ts节点和这为我工作

import {ClassName} from './path/to/file.js/'  //not file.ts

即使你的文件名是file.ts,使用file.js也可以

wztqucjr

wztqucjr5#

关于TS,你唯一需要知道的就是这个简单的事实:
维护TS项目的成本>修复未捕获的TS错误的成本
简单是最好的。

相关问题