TypeScript干货

类型化声明

    const a:string = "这是一个不可变的字符串";
    let b:string; // b只能赋字符串
    let c:any; // c可以赋任一值
    let d: () => void; // d只能赋空参数且返回为空的函数

接口

    interface Ia { foo: () => void; }
    interface Ib { bar: () => string; }
    interface Ic { name: string; }
    class D { doSomeThing() { .... } }
    class E implements Ia,Ib,D {
        doSomeThing: () => any;// 如果实现的是类内元素,可以只声明,不实现
        foo = () => {...} // 如果实现的是接口内元素,必须按照类型定义
        bar = () => {...} // 必须把要实现的所有接口内的元素声明
        constructor(param: Ic) {
            const { name } = param;// param 必须是只含有name的对象
        }
    }

class语法糖

    class a extends b {
        constructor() {
            super();//执行b的构造函数
        }
        public foo() {
            super.foo();//执行b的原型上的foo函数
            console.log(`
                我在a的prototype上
                this指向context
            `);
        }
        public bar = () => {
            cosnole.log(`
                我在a的实例里,
                this指向a的实例
            `)
        }
        public blaha = function() {
            cosnole.log(`
                tslint默认禁止使用
                我在a的实例里,
                this指向context
            `)
        }
    }

装饰器

类似于@tag,@mixin的东西, 这个有点复杂,只说在class前面的装饰器吧, 是用来处理对象原型的函数, 会在构造函数执行结束后执行

Object解构

    const obj = { a: 1 };
    const name = "name";
    const data = { ...obj, b: 2, name }; // { a: 1, b : 2, name: "name" }
    const { a:xxx } = obj; // xxx===1
    const data1 = {[xxx]: 'data1'}; // {1: 'data1'}

一个更好的mixin

typescript对mixin支持很好, 配合vscode的输入提醒代码体验十分完美, 所以几乎可以放弃riot的mixin了

async await 处理异步流程

目前来说原生的Promise支持已经很不错了, async虽然是个实验特性, 但发明C#的微软明显推荐用这个特性。

用TypeScript写一个Riot组件