Node.js TypeScript:意外的保留字

Node.js TypeScript:意外的保留字,node.js,typescript,webstorm,Node.js,Typescript,Webstorm,我在WebStorm IDE和Node.js中有一个项目。我创建了一个名为“mongo manager.ts”的文件,我在routes\index.js文件中使用了它。它无缝地工作 然后我做了两件事: WebStorm总是问我是否要将TypeScript编译成JavaScript,我总是忽略它,但有一次我点击“是”,然后在解决了一些错误后,它成功地将ts文件编译成js 我将index.js转换为index.ts,现在仍然有index.js,这是编译的输出 从那时起,当我尝试运行我的应用程序时(使

我在WebStorm IDE和Node.js中有一个项目。我创建了一个名为“mongo manager.ts”的文件,我在routes\index.js文件中使用了它。它无缝地工作

然后我做了两件事:

  • WebStorm总是问我是否要将TypeScript编译成JavaScript,我总是忽略它,但有一次我点击“是”,然后在解决了一些错误后,它成功地将ts文件编译成js
  • 我将index.js转换为index.ts,现在仍然有index.js,这是编译的输出
  • 从那时起,当我尝试运行我的应用程序时(使用WebStorm中的三角形绿色按钮,该按钮反过来使用命令行:“C:\Program Files(x86)\JetBrains\WebStorm 11.0.1\bin\runnerw.exe”“C:\Program Files\nodejs\node.exe”bin\www),我得到以下错误:

    导入mongodb=require('mongodb')

    ^^^^^^

    SyntaxError:意外的保留字

    现在,“import”语句没有具体问题,因为如果省略它,下一个非JavaScript语句将抛出相同的异常。它只是试图把TypeScript当作JavaScript来对待

    我发现了以下问题: ,

    他们建议要么使用“tsc”而不是node.exe,要么确保使用node.exe运行js文件而不是ts文件

    现在的问题是node.exe直接运行的文件是“www”,它是一个JavaScript文件,然后调用app.js,它仍然是JavaScript,但是后来调用了index.ts和mongo-manager.ts,所以我有一个js和ts的混合文件

    另一个也是最重要的一点是,我的代码已经无缝地工作了,即使它是混合的,并且没有采纳这些问题中的任何建议,直到我回答WebStorm“是”是否将TypeScript编译为JavaScript的问题,这一问题一直出现

    不管怎样,我只希望我的应用程序能再次运行。


    我们将非常感谢您的帮助

    您需要知道编译错误和运行时错误之间的区别。似乎您遇到的是运行时错误。请检查Node.js正在执行的JavaScript文件


    目前Node.js还不支持ES6模块语法,您需要在
    tsconfig.json
    中设置
    module
    字段,使其成为
    commonjs
    。理想情况下,在输出JavaScript文件中,
    import mongodb=require('mongodb')
    应作为const mongodb=require('mongodb')发出针对ES6或
    var mongodb=require('mongodb')以ES5为目标。

    在我的输出文件中,我有var mongodb=require('mongodb');我写道这不是问题所在,因为如果我省略它,那么下一个非JavaScript语句将抛出相同的异常。它似乎不运行js文件,而是运行原始ts文件。不管怎样,正如我所说:在那之前,我甚至没有将ts编译成js,它可以无缝地工作。你需要扩展名为“.ts”的文件吗?是的。如果我尝试添加对js文件的引用,则会出现编译错误:TS6054:file'C:/ProjectFolder/dal/mongo manager.js'的扩展名不受支持。唯一受支持的扩展名是“.ts”、“.tsx”、“.d.ts”。实际上,您应该省略扩展名。