TypeScript,SyntaxError:意外令牌{

时间:2019-06-11 14:57:49

标签: javascript typescript ecmascript-6

我正在尝试使用“ node main.js”运行我的程序,但是,它不断出现错误“ SyntaxError:Unexpected token {”

D:\Visual Studio Code Projects\ts-hello>node main.js
D:\Visual Studio Code Projects\ts-hello\main.js:1
import { LikeComponent } from './like.component';
       ^

SyntaxError: Unexpected token {
    at Module._compile (internal/modules/cjs/loader.js:721:23)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)

我尝试将tsconfig.json文件更改为“ module”:“ commonjs”,但是,此操作无效。我什至卸载并重新安装了节点并从头开始。

import{LikeComponent} from './like.component';

let component = new LikeComponent(10, true);
component.onClick();
console.log(`likesCount: ${component.likesCount}, isSelected: ${component.isSelected}`);

应将程序正确输出到命令提示符。

2 个答案:

答案 0 :(得分:2)

请注意,您正在运行node main.js

您的main.js当前具有esm语法(也称为ES6模块语法)。

假设它是从main.ts编译的,则您的`tsconfig.json中必须有module: commonjs

// tsconfig.json
{
  "compilerOptions": {
    "module": "commonjs",
    ... // other configurations
  }
}

这样,当您运行tsc编译代码时,它将使用commonjs模块语法创建main.js

答案 1 :(得分:1)

如果您正在尝试调试 vscode 项目并且您已经拥有 "module": "commonjs",,那么请检查您的“launch.json”outFiles 以确保它与您的输出文件的实际位置一致(通常通过outDir):

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Launch Program",
      "program": "${workspaceFolder}/src/index.ts",
      "preLaunchTask": "tsc: build - tsconfig.json",
      "outFiles": ["${workspaceFolder}/build/**/*.js"], //make sure this matches!
      "sourceMaps": true
    }
  ]
}

似乎如果 vscode 没有找到匹配的文件,它只是尝试通过节点运行 ts 文件(这解释了错误)。

我只是在这个问题上挣扎了一段时间,所以希望这能让其他人免于头疼。