Languages Features Creators CSV Resources Challenges Add Language
GitHub icon

Static Typescript

Static Typescript - Programming language

< >

Static Typescript is a programming language created in 2019.

#4062on PLDB 4Years Old 0Books
0Papers

We present Static TypeScript (STS), a subset of TypeScript (itself, a gradually typed superset of JavaScript), and its compiler/linker toolchain, which is implemented fully in TypeScript and runs in the web browser.


Language features

Feature Supported Token Example
MultiLine Comments โœ“
/* A comment
*/
Comments โœ“
// A comment
Algebraic Data Type โœ“
declare type numOrString = string | number
Line Comments โœ“
// A comment
Union Types โœ“
declare type numOrString = string | number
Single-Type Arrays โœ“
const scores: int[]
Type Inference โœ“
Strings โœ“
"hello world"
Type Parameters โœ“
function identity(arg: T): T {
   return arg;
}
Static Typing โœ“
Inheritance โœ“
class B {}
class A extends B {}
Print() Debugging โœ“
console.log("Hi")
Namespaces โœ“
// Typescript even supports splitting namespaces across multiple files:
// Validation.ts
namespace Validation {
    export interface StringValidator {
        isAcceptable(s: string): boolean;
    }
}
// LettersOnlyValidator.ts
/// 
namespace Validation {
    const lettersRegexp = /^[A-Za-z]+$/;
    export class LettersOnlyValidator implements StringValidator {
        isAcceptable(s: string) {
            return lettersRegexp.test(s);
        }
    }
}
Mixins โœ“
// https://www.typescriptlang.org/docs/handbook/mixins.html
class SmartObject implements Disposable, Activatable {
}
// Note: still need to do some runtime ops to make that work.
Interfaces โœ“
// https://www.typescriptlang.org/docs/handbook/interfaces.html
interface SquareConfig {
   color?: string;
   width?: number;
}
File Imports โœ“
import { ZipCodeValidator } from "./ZipCodeValidator";
/// 
/// 
import moo = module('moo');
/// 
Type Casting โœ“
something;
Classes โœ“
class Person {}
Booleans โœ“
const result = true
Generics โœ“
function identity(arg: T): T {
   return arg;
}
Abstract Types โœ“
abstract class Animal {}
class Dog extends Animal
Access Modifiers โœ“
class Person {
  private _age = 2
  public get age() {
    return _age
  }
  protected year = 1990
}
Static Methods โœ“
class Person {
  static sayHi() {
    console.log("Hello world")
  }
}
Enums โœ“
enum Direction {
 Up,
 Down
}
Scientific Notation โœ“
Binary Literals โœ“
// 0[bB][01]+n?
0b100110100000110011110010010
Floats โœ“
// (\.[0-9]+|[0-9]+\.[0-9]*|[0-9]+)([eE][-+]?[0-9]+)?
80766866.0
Hexadecimals โœ“
// 0[xX][0-9a-fA-F]+n?
0x4D06792
Octals โœ“
// 0[oO]?[0-7]+n?
0o464063622
Sets โœ“
set = new Set()
set.add("foo")
Function Composition โœ“
function o(f, g) {
   return function(x) {
       return f(g(x));
   }
}
Destructuring โœ“
const o = {p: 42, q: true};
const {p, q} = o;
Default Parameters Pattern โœ“
function multiply(a, b = 1) {
 return a * b;
}
Increment and decrement operators โœ“
let i = 0
i++
i--
Methods โœ“
class Person {
 method1() {}
 method2() {}
}
Functions โœ“
function helloWorld() {console.log("hi")}
Case Sensitivity โœ“
Zero-based numbering โœ“
While Loops โœ“
let times = 10
while (times) {times--}
console.log("done")
Ternary operators โœ“
let i = true ? 1 : 0
Switch Statements โœ“
var animal = "dog"
switch (animal) {
 case "dog": console.log("yay"); break;
 case "cat": console.log("oh"); break;
}
Letter-first Identifiers โœ“
References โœ“
Multiline Strings โœ“
const lines = `one
two`
Anonymous Functions โœ“
(() => console.log("hello world"))()
Infix Notation โœ“
const six = 2 + 2 + 2
Implicit Type Casting โœ“
console.log("hello " + 2)
Assignment โœ“
var name = "John"
Directives โœ“
"use strict";
"use asm";
Generators โœ“
function* fibonacci(limit) {
    let [prev, curr] = [0, 1];
    while (!limit || curr <= limit) {
        yield curr;
        [prev, curr] = [curr, prev + curr];
    }
}
// bounded by upper limit 10
for (let n of fibonacci(10)) {
    console.log(n);
}
// generator without an upper bound limit
for (let n of fibonacci()) {
    console.log(n);
    if (n > 10000) break;
}
// manually iterating
let fibGen = fibonacci();
console.log(fibGen.next().value); // 1
console.log(fibGen.next().value); // 1
console.log(fibGen.next().value); // 2
console.log(fibGen.next().value); // 3
console.log(fibGen.next().value); // 5
console.log(fibGen.next().value); // 8
// picks up from where you stopped
for (let n of fibGen) {
    console.log(n);
    if (n > 10000) break;
}
Garbage Collection โœ“
First-Class Functions โœ“
[2.0,1.1].map(Math.round)
Exceptions โœ“
try {
 undefinedFn()
} catch (err) {
 console.log(err)
}
hasDynamicTyping โœ“
Constants โœ“
const one = 1
Constructors โœ“
class Person {
 constructor(name) {
   this._name = name
 }
}
new Person("Jane")
Conditionals โœ“
if (true)
 console.log("hi!")
Method Chaining โœ“
"hello world".toString().substr(0, 1).length
Magic Getters and Setters โœ“
// Can be implemented in ES6 using proxies:
"use strict";
if (typeof Proxy == "undefined") {
    throw new Error("This browser doesn't support Proxy");
}
let original = {
    "foo": "bar"
};
let proxy = new Proxy(original, {
    get(target, name, receiver) {
        let rv = Reflect.get(target, name, receiver);
        if (typeof rv === "string") {
            rv = rv.toUpperCase();
        }
        return rv;
      }
});
console.log(`original.foo = ${original.foo}`); // "original.foo = bar"
console.log(`proxy.foo = ${proxy.foo}`);       // "proxy.foo = BAR"
Dynamic Properties โœ“
class Person {}
const person = new Person()
person.age = 50
Source Maps โœ“
{
 version: 3,
 file: 'min.js',
 names: ['bar', 'baz', 'n'],
 sources: ['one.js', 'two.js'],
 sourceRoot: 'http://example.com/www/js/',
 mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
};
Bitwise Operators โœ“
var x = 5 & 1;
Single Dispatch โœ“
Polymorphism โœ“
"a" + "b"; 1 + 2
Merges Whitespace โœ“
Lists โœ“
const list = [1,2,3]
Integers โœ“
80766866
Breakpoints โœ“
if (false)
  debugger
Partial Application โœ“
const addNumbers = (num1, num2) => num1 + num2
const add5 = num => addNumbers(10, num)
Map Functions โœ“
[1,2.1].map(Math.round)
Binary Operators โœ“
1 + 1
Async Await โœ“
async doSomething => await somethingElse()
Expressions โœ“
1 + 1
Regular Expression Syntax Sugar โœ“
console.log("Hello World".match(/\w/))
Statements โœ“
let x = 3;
Case Insensitive Identifiers X
Semantic Indentation X
Operator Overloading X
Multiple Inheritance X
Function Overloading X
Macros X
Processor Registers X
Multiple Dispatch X
Pointers X
Variable Substitution Syntax X
ssl.html ยท static-typescript.html ยท surge.html

View source

- Build the next great programming language ยท Search ยท Day 212 ยท About ยท Blog ยท Acknowledgements ยท Traffic ยท Traffic Today ยท GitHub ยท feedback@pldb.com