Learning TypeScript 读书笔记3

作者: GunnerAha | 来源:发表于2018-06-09 10:33 被阅读8次

    Chap 4 TypeScript中的面向对象编程

    1.面向对象开发的一些原则SOLID:

    • 单一职责原则SRP:
    • 开闭原则OCP:
    • 里氏替换原则LSP:
    • 接口隔离原则ISP:
    • 依赖翻转原则DIP:

    2.T雨棚script支持类class、接口interface。

    3.类之间的关系:

    • 关联:有联系但是没有从属关系,有独立生命周期,例如老师和学生
    • 聚合:有联系属于从属关系,有独立生命周期,例如手机和电池
    • 组合:有联系属于从属关系,子对象没有独立声明周期,例如问题和答案,问题销毁了,答案也没有存在的理由

    4.支持继承特性,使用关键字extends。为了避免多继承带来的菱形问题,提供“混合”特性,用于替代多重继承。混合:

    • 使用关键字implements实现多个父类,多个父类不在继承公共的祖先类(混合只能继承上一级的方法)
    • 实现混合的子类中,声明implements父类中需要使用的方法
    • 实现混合的泛型函数:
    function applyMixins(derivedCtor:any, baseCtors:any[]){
       baseCtors.forEach(baseCtor=>{
           Object.getOwnPropertyNames(baseCtor.prototype).forEach(name=>{
               if(name!=='constructor'){
                   derivedCtor.prototype[name]=baseCtor.prototype[name];
               }
           }
       }
    }
    

    混合的限制:

    • 混合只能继承上一级的方法
    • 如果父类有相同的方法,那么会继承传入applyMixins第二个参数最后一个类的方法

    5.支持泛型类,需要声明泛型T拥有构造函数,如下写法:

    function fatcory<T>():T{
        var type:{new():T;};
        return new type();//直接return new T();报找不到标识符T,编译错误
    }
    

    6.命名空间用于组织代码,属于内部模块,默认私有,需要使用export导出公共部分。例如:

    namespace app{
        export class UserModel{//...}
    }
    

    命名空间支持嵌套。

    7.模块:与命名空间的区别是,在声明了所有的模块之后,不会使用<script>引入,而是通过模块加载器来加载。Javascript在es6之前不支持模块,常用的模块加载器有:

    • RequireJS:异步加载AMD
    • Browserify:使用CommonJS
    • SystemJS:通用模块加载器,支持所有模块定义语法,如ES6/CommonJS/AMD/UMD

    对于Typescript,在编译时使用--module来标明使用哪种模块加载器器。
    内部模块例子:

    export class UserModel{}
    

    8.Typescript支持ES6的模块语法:

    class UserModel{}
    export {UserModl}
    

    这里export也可以写在class前面。

    9.引入模块使用import:import {UserModel,xxx} from ".models";

    相关文章

      网友评论

        本文标题:Learning TypeScript 读书笔记3

        本文链接:https://www.haomeiwen.com/subject/izcteftx.html