6

Why this code doesn't work?

I have the following 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}`);

when I try to run it with

node app.ts

I have the next:

[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

But I expect:

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

TypeScript Version 1.8.10

venber
  • 61
  • 1
  • 1
  • 4
  • 5
    "TypeScript Version 1.8.10" — You're running it with node. You're running it directly with node. You aren't transpiling it to JavaScript. It is being treated as JavaScript. – Quentin Sep 29 '16 at 16:07

3 Answers3

11

You need to compile your code first.

tsc app.ts

Then run it with

node app.js

TypeScript is a transpiled language. tsc, the typescript compiler, transpiles the TypeScript source to JavaScript. Nodejs is a JavaScript environment which wraps the V8 virtual machine.

Martin
  • 15,820
  • 4
  • 47
  • 56
  • Could you mention the reason Martin Why it would compile as ts and run with js – Ashok kumar Ganesan Oct 24 '19 at 10:13
  • 2
    TypeScript is a transpiled language. tsc, the typescript compiler, transpiles the TypeScript source to JavaScript. Nodejs is a JavaScript an environment which wraps the V8 virtual machine. – Martin Oct 24 '19 at 18:53
3

You are running the code with NodeJS. You aren't transpiling it from TypeScript to JavaScript, so you are trying to treat your TypeScript as if it were JavaScript.

That might be OK, since TypeScript is a superset of JavaScript. In this particular case, your code also happens to be valid JS.

The destructuring assignments you are trying to use are an ES6 feature that are only supported in NodeJS from 6.5 onwards.

You need to upgrade NodeJS to a newer version.

Alternatively, transpile the TypeScript to ES5 with tsc app.ts

Quentin
  • 914,110
  • 126
  • 1,211
  • 1,335
2

To make it even easier on yourself and run it one command, you can use the ts-node library. After installing to your project, you can just run the following:

ts-node app.ts
maleonard
  • 21
  • 1