zoukankan      html  css  js  c++  java
  • 【TypeScript】02 面向对象

    【联合类型】

    联合类型(Union Types)可以通过管道(|)将变量设置多种类型,赋值时可以根据设置的类型来赋值。

    注意:只能赋值指定的类型,如果赋值其它类型就会报错。

    var val:string|number 
    val = 12 
    console.log("数字为 "+ val) 
    val = "Runoob" 
    console.log("字符串为 " + val)

    可以将联合类型作为函数参数使用:

    function disp(name:string|string[]) { 
            if(typeof name == "string") { 
                    console.log(name) 
            } else { 
                    var i; 
                    for(i = 0;i<name.length;i++) { 
                    console.log(name[i])
                    } 
            } 
    } 
    disp("Runoob") 
    console.log("输出数组....") 
    disp(["Runoob","Google","Taobao","Facebook"])

    可以将数组声明为联合类型:

    var arr:number[]|string[]; 
    var i:number; 
    arr = [1,2,4] 
    console.log("**数字数组**")  
     
    for(i = 0;i<arr.length;i++) { 
       console.log(arr[i]) 
    }  
     
    arr = ["Runoob","Google","Taobao"] 
    console.log("**字符串数组**")  
     
    for(i = 0;i<arr.length;i++) { 
       console.log(arr[i]) 
    }

    【TypeScript接口】

    interface interface_name { 
    }

    接口的方法即抽象方法,只有声明而没有具体实现:

    但是属性还是一样的只有声明

    接口被描述成一种类型,这里是由我们的变量对接口进行实现

    interface IPerson { 
        firstName:string, 
        lastName:string, 
        sayHi: ()=>string 
    } 
     
    var customer:IPerson = { 
        firstName:"Tom",
        lastName:"Hanks", 
        sayHi: ():string =>{return "Hi there"} 
    } 
     
    console.log("Customer 对象 ") 
    console.log(customer.firstName) 
    console.log(customer.lastName) 
    console.log(customer.sayHi())  
     
    var employee:IPerson = { 
        firstName:"Jim",
        lastName:"Blakes", 
        sayHi: ():string =>{return "Hello!!!"} 
    } 
     
    console.log("Employee  对象 ") 
    console.log(employee.firstName) 
    console.log(employee.lastName)

    【联合类型和接口】

    interface RunOptions { 
        program:string; 
        commandline:string[]|string|(()=>string); 
    } 
     
    // commandline 是字符串
    var options:RunOptions = {program:"test1",commandline:"Hello"}; 
    console.log(options.commandline)  
     
    // commandline 是字符串数组
    options = {program:"test1",commandline:["Hello","World"]}; 
    console.log(options.commandline[0]); 
    console.log(options.commandline[1]);  
     
    // commandline 是一个函数表达式
    options = {program:"test1",commandline:()=>{return "**Hello World**";}}; 
     
    var fn:any = options.commandline; 
    console.log(fn());

    【接口和数组】

    interface namelist { 
       [index:number]:string 
    } 
     
    var list2:namelist = ["John",1,"Bran"] / 错误元素 1 不是 string 类型
    interface ages { 
       [index:string]:number 
    } 
     
    var agelist:ages; 
    agelist["John"] = 15   // 正确 
    agelist[2] = "nine"   // 错误

    【接口多继承】

    TypeScript和我们的Java接口一样允许多继承:

    interface IParent1 { 
        v1:number 
    } 
     
    interface IParent2 { 
        v2:number 
    } 
     
    interface Child extends IParent1, IParent2 { } 
    var Iobj:Child = { v1:12, v2:23} 
    console.log("value 1: "+Iobj.v1+" value 2: "+Iobj.v2)

    【TypeScript 类】

    class Car { 
        // 字段 
        engine:string; 
     
        // 构造函数 
        constructor(engine:string) { 
            this.engine = engine 
        }  
     
        // 方法 
        disp():void { 
            console.log("发动机为 :   "+this.engine) 
        } 
    }

    创建实例:

    var obj = new Car("Engine 1")

    同Java一样,TypeScript不支持类的多继承,也是一样的多重继承:

    class Root { 
       str:string; 
    } 
     
    class Child extends Root {} 
    class Leaf extends Child {} // 多重继承,继承了 Child 和 Root 类
     
    var obj = new Leaf(); 
    obj.str ="hello" 
    console.log(obj.str)

    方法的重写:

    class PrinterClass { 
       doPrint():void {
          console.log("父类的 doPrint() 方法。") 
       } 
    } 
     
    class StringPrinter extends PrinterClass { 
       doPrint():void { 
          super.doPrint() // 调用父类的函数
          console.log("子类的 doPrint()方法。")
       } 
    }

    Static静态,类的变量

    class StaticMem {  
       static num:number; 
       
       static disp():void { 
          console.log("num 值为 "+ StaticMem.num) 
       } 
    } 
     
    StaticMem.num = 12     // 初始化静态变量
    StaticMem.disp()       // 调用静态方法

    instanceof 运算

    var Person = /** @class */ (function () {
        function Person() {
        }
        return Person;
    }());
    var obj = new Person();
    var isPerson = obj instanceof Person;
    console.log(" obj 对象是 Person 类实例化来的吗? " + isPerson);

    就连访问修饰符也是一样。。。

    private
    protected
    public
    • public(默认) : 公有,可以在任何地方被访问。

    • protected : 受保护,可以被其自身以及其子类和父类访问。

    • private : 私有,只能被其定义所在的类访问。

    类实现接口也是一样使用implements:

    interface ILoan { 
       interest:number 
    } 
     
    class AgriLoan implements ILoan { 
       interest:number 
       rebate:number 
       
       constructor(interest:number,rebate:number) { 
          this.interest = interest 
          this.rebate = rebate 
       } 
    } 
     
    var obj = new AgriLoan(10,1) 
    console.log("利润为 : "+obj.interest+",抽成为 : "+obj.rebate )
  • 相关阅读:
    我理解的 js 异步成长总结
    小程序 获取地理位置-- wx.getLocation
    H5页面在微信端的分享
    ES6 我的总结学习
    5 分钟掌握 JS 实用窍门技巧,帮你快速撸码--- 删除数组尾部元素、E6对象解构、async/await、 操作平铺嵌套多维数组等
    小程序 video 层级,原生组件
    React 事件 传参
    微信小程序中如何使用setData --- 修改数组对象、修改对象
    流氓式--小程序用户授权 --- 小程序授权、获取用户信息
    深度学习的反向传播笔记
  • 原文地址:https://www.cnblogs.com/mindzone/p/13389817.html
Copyright © 2011-2022 走看看