'Cause ESNext is not enough
An opinionated TypeScript superset for the next generation of JavaScript
pnpm create jspbun create jspnpm create jsp JS+ TypeScript
Object.keys(envars) .map(envar => `${envar}=${envars[envar]}`) .join(' ') |> `$ ${%}` |> chalk.dim(%, 'node', args.join(' ')) |> console.log(%)console.log( chalk.dim( `$ ${Object.keys(envars) .map(envar => `${envar}=${envars[envar]}`) .join(' ') }`, 'node', args.join(' ') )); JS+ TypeScript
const one = 1;const two = 2;const three = 3;
one == two == three; // falseone != two != three; // true
one === two === three; // falseone !== two !== three; // true
one < two < three; // trueone <= two <= three; // true
one > two > three; // falseone >= two >= three; // falseconst one = 1;const two = 2;const three = 3;
one == two && two == three; // falseone != two && two != three; // true
one === two && two === three; // falseone !== two && two !== three; // true
one < two && two < three; // trueone <= two && two <= three; // true
one > two && two > three; // falseone >= two && two >= three; // false JS+ TypeScript
class C { message = "hello!";
@bound m() { console.log(this.message); }}
function bound(value, { name, addInitializer }) { addInitializer(function () { this[name] = this[name].bind(this); });}// TypeScript supports decorators behind an experimental flag// JavaScript doesn't support decorators yet
We strongly believe that certain trademarks shouldn't exist