This is an open source cross-platform solution which can convert native iOS app written in Swift to cross-platform web app. The build-in Swift4 to TypeScript transpiler is powered by ANTLR4.
WIP
Numeric Types
Swift:
leti:Int=2,d:Double=0.33varj:Int= i +2print(j)
TypeScript:
/** * In `Foundation.ts`: * interface int extends Number { } * interface double extends Number { } */consti: int=2,d: double=0.33;letj: int=(iasnumber)+2;console.log(j)
Argument Label
Swift:
func do_sth(code:Int, _ msg:String, extra x:Double){ // ... }do_sth(code:1,"error", extra:1.5)
TypeScript:
functiondo_sth(_: {code: int,1: string,extra: double}): void{letcode: int=_.code,msg: string=_[1],x: double=_.extra;// ...}do_sth({code: 1,1: 'error',extra: 1.5});
Overloading
Swift:
func version(_ str:String){print("version: \(str)")}func version(_ major:Int, _ minor:Int){print("version: \(major).\(minor)")}func var_dump(_ val:Int){print("[Int] \(val)")}func var_dump(_ val:String){print("[String] \(val)")}func var_dump(val x:Int){print("[Int](val) \(x)")}
TypeScript:
functionversion(_: {0: string}): void;functionversion(_: {0: int,1: int}): void;functionversion(_: {0: string}|{0: int,1: int}): void{if('string'===typeof_[0]){letstr: string=_[0];console.log(`version: ${str}`);}elseif(_[0]instanceofint){letmajor: int=_[0],minor: int=_[1];console.log(`version: ${major}.${minor}`);}}functionvar_dump(_: {0: int}): void;functionvar_dump(_: {0: string}): void;functionvar_dump(_: {val: int}): void;functionvar_dump(_: {0: int}|{0: string}|{val: int}): void{if(_[0]instanceofint){letval: int=_[0];console.log(`[Int] ${val}`);}elseif('string'===typeof_[0]){letval: string=_[0];console.log(`[String] ${val}`);}elseif(_.valinstanceofint){letval: int=_[0];console.log(`[Int](val) ${val}`);}}
In-Out Parameters
Swift:
func add(_ inc:Int, to x:inoutInt){ x += inc }vara:Int=1add(3, to:&a)print(a) // prints "4"
TypeScript:
functionadd(_: {0: int,to: {0: int}}): void{letinc: int=_[0],x: {0: int}=_.to;(x[0]asnumber)+=(incasnumber);}leta: int=1;add({0: 3,to: {get0(): int{returna;},set0(_: int){a=_;}}});console.log(a);// prints "4"