changtimwu / changtimwu.github.com

Tim's testing/practice notes
7 stars 2 forks source link

es6/es7/typescript #42

Open changtimwu opened 8 years ago

changtimwu commented 8 years ago
" for ES6
Plugin 'othree/yajs.vim'
" for ES7
Plugin 'othree/es.next.syntax.vim'
changtimwu commented 8 years ago

async syntax comparison

babel

require("babel-polyfill");

import request from "request";
async function main() {
  await pingmany();
}

async function pingmany() {
  for (var i = 0; i < 10; i++) {
    await delay(1000);
    console.log("ping");
  }
}

function delay(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}
main();

typescript 1.7

async function main() {
  await pingmany();
}

async function pingmany() {
  for (var i = 0; i < 10; i++) {
    await delay(1000);
    console.log("ping");
  }
}

function delay(ms) {
   return new Promise(resolve => setTimeout(resolve, ms));
}

main();

almost identical but why ts doesn't need polyfill?

changtimwu commented 8 years ago
function delay(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

async function caller() {
  //ok
  await delay();
}

//error!
await delay();
changtimwu commented 6 years ago

please study the advance type to understand all variations. https://www.typescriptlang.org/docs/handbook/advanced-types.html

changtimwu commented 6 years ago

define type with infinite set of values

    type _quarter = "quarter" | "quarters" | "Q";
    type _isoWeek = "isoWeek" | "isoWeeks" | "W";
    type _date = "date" | "dates" | "D";
    type StartOf = Base | _quarter | _isoWeek | _date;
    startOf(unitOfTime: StartOf): Moment;

startOf( 'day') //ok
startOf('xday') // error
changtimwu commented 6 years ago

complicated typing cases

Traditional JS libs usually are used to have some

var BigNumber = require
var b1= new BigNumber(3) // it's a class, which is newable
var b2 = BigNumber.EUCLID // it also has static members

How to type this kind of lib inside a TS interface/class?

import BigNumber from 'bignumber.js'

interface fff {
   //BN:BigNumber //wrong this means BN is an instance of BigNumber
    BN:typeof BigNumber
}

function bfunc( b:fff){
  var gg= new b.BN(3) //ok! it's a 
  var rr = b.BigNumber.EUCLID  //ok! it's accessible 
}