TypeScript:控制台中的“Unexpected token”消息SyntaxError

6

为什么这段代码不起作用?

我有以下的 app.ts 代码:

var a = 1;
var b = 3;
console.log(`Before a = ${a}, b = ${b}`);

[a, b] = [b, a];
console.log(`After a = ${a}, b = ${b}`);

当我尝试使用

node app.ts

运行它时,会出现以下错误:

[a, b] = [b, a];
^

ReferenceError: Invalid left-hand side in assignment
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:373:25)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Function.Module.runMain (module.js:441:10)
    at startup (node.js:139:18)
    at node.js:974:3

但我期望:

Before a = 1, b = 2
After a = 2, b = 1

TypeScript 版本 1.8.10


5
你正在使用Node运行TypeScript版本1.8.10。你直接使用Node运行它,而不是将其转换成JavaScript。它被视为JavaScript处理。 - Quentin
3个回答

11

您需要先编译您的代码。

tsc app.ts

然后使用以下命令运行:

node app.js

TypeScript是一种编译语言,TypeScript编译器tsc将TypeScript源代码转换为JavaScript。Node.js是一个JavaScript环境,它封装了V8虚拟机。


你能说一下为什么马丁它可以编译成ts并且用js运行的原因吗? - Ashok kumar Ganesan
2
TypeScript是一种转译语言。TypeScript编译器tsc将TypeScript源代码转译为JavaScript。Node.js是一个JavaScript环境,它包装了V8虚拟机。 - Martin

3
你正在使用NodeJS运行代码。你没有将TypeScript转换为JavaScript,因此你试图将TypeScript视为JavaScript来处理。
这可能是可以的,因为TypeScript是JavaScript的超集。在这种情况下,你的代码也恰好是有效的JS。
你正在尝试使用ES6功能中的解构赋值,但只有从6.5版本开始,NodeJS才支持该功能。
你需要升级NodeJS到更新的版本。
或者,使用tsc app.ts将TypeScript转换为ES5。

2
为了让自己更加轻松,并且只需运行一个命令,您可以使用ts-node库。在将其安装到您的项目后,您只需运行以下命令即可:
ts-node app.ts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接