• typeScript笔记


    typeScript 是一种给 JavaScript 添加特性的语言扩展。如:类型批注和编译时类型检查、类、接口、模块。

    数据类型系统: numbers, strings, structures, boolean等,当类型没有给出时,TypeScript 编译器利用类型推断以推断类型。如果由于缺乏声明,没有类型可以被推断出,那么它就会默认为是动态的 any 类型。any’类型是一种强大的兼容存在的 JavaScript 库的类型系统。他允许跳过 TypeScript 的编译时类型的检查。(这些值可能来自动态内容,例如从用户或第三方库。在这种情况下,我们要退出类型检查)

    any:

    var notSure: any = 4;//notSure 这个是不确定的值,默认先给一个数字 4

    notSure = "this string";//改变这个值为 this string

    notSure = false; //最终确定的值是一个 boolean 值.

    数组 Array:
    //第一种方式,你可以在数据类型之后带上’[]‘:
    var list:number[] = [1, 2, 3];
    //第二种方式,也可以采用泛型的数组类型:
    var list1:Array<number> = [1, 2, 3];//泛型数组

    var isFlag:boolean=false;这个 : 号代表应该是代表继承的意思

    枚举 Enum
    enum Color {Red, Green, Blue};//enum 关键字 枚举对象{声明变量}
    var c1: Color = Color.Green;//从枚举里面拿出绿色出来赋给一个叫 c 的变量
    //---------手动枚举所有值都设置---------------------
    //默认枚举类型其实数值从 0 开始,你可以可用手动设置某一个成员的数值。例如我们可以将上文
    的起始值定为 1:
    enum Color1 {Red = 1, Green = 2, Blue = 4};
    var c2: Color1 = Color1.Green;
    //---------手动设置全部的枚举成员:---------------------
    enum Color2 {Red = 1, Green, Blue};
    var colorName: string = Color2[2];

    var Color1;
    (function (Color1) {
      Color1[Color1["Red"] = 1] = "Red";
      Color1[Color1["Green"] = 2] = "Green";
      Color1[Color1["Blue"] = 4] = "Blue";
    })(Color1 || (Color1 = {}));

    void 和‘any’相对的数据类型则是’Void‘,它代表没有任何数据类型。我们常用的一个方法
    没有任何返回值:
    //,格式如:function doMain:void{}
    function warnUser(): void {
    alert("This is my void");
    }

    例子:ts & js

    /***返回 string 一个值***/
    function setTableRowHtml2():string{
      var userName:string="";
      $("tr").each(function(){
        userName=$(this).find("td:eq(1)").html();
      );
      return userName;
    }

    Ts 编译生成的 js

    /***返回 string 一个值***/
    function setTableRowHtml2() {
      var userName = "";
      $("tr").each(function () {
        userName = $(this).find("td:eq(1)").html();
      });
      return userName;
    }

    TypeScript 接口

    /**--声明一个接口,这个接口不会在 js 上面出现,只会在显示一个 user 对象在 getUserInfo*/

    interface IUserInfo{
         age : any;//定义一个任何变量的 age.
      userName :string;//定义一个 username.
    }
    /*********获取用户信息*******/
    function getUserInfo(user : IUserInfo):string{
      return user.age+"======"+user.userName;
    }
    //用一个数组对象作为一个 user 对象传值过 getUserInfo 函数方法..参数必须要以接口
    IUserInfo 对应上.
    少传一个参数,typescript 会自动帮你检测报错,如果用纯 javascript 去写的话,不会报错,
    ts 大大减少检查 js 问题

    interface SquareConfig {
      color?: string;//
      width?: number;
    }
    /***************创建一个对象 function.**************/
    function createSquare(config: SquareConfig): {color: string; area: number} {
    //此时 newSquare 里面的参数必须与 :后面里面的参数名称一致.
      var newSquare = {color: "white", area: 100};
      if (config.color) {
        newSquare.color = config.color;
      }
      if (config.width) {
        newSquare.area = newSquare.area * config.width;
      }
      return newSquare;
    }
    //--createSquare 返回的对象是 newSquare,所有只能获取 color 和 area 并获取不了 width
    这个属性的值..
    var mySquare1 = createSquare({color: "red"});//与接口的变量 color 一样,此时这个值
    是取出是默认值 color=red
    var mySquare2 = createSquare({color1: "red"});//与接口的变量 color 不一样,此时这
    个值是取出是默认值 color=white
    console.log(mySquare1.color+"=="+mySquare1.area);//
    console.log(mySquare2.color+"=="+mySquare2.area);//
    var mySquare3 = createSquare({color: "yellow",80});//这里给了两个变量值,
    一个是 color,一个是 width
    console.log(mySquare3.color+"=="+mySquare3.area);//所以这个值必须等于 800JavaScript 的 的 search 函数//--typescript 的 function 类型结合 javascript 的 search 函数使interface searchFunt{

    //声明一个两个变量..
      (source: string, subString: string): boolean;
    }
    var mySearch : searchFunt;//声明一个 interface 变量接收
    mySearch = function(source:string,subString:string){
      var result = source.search(subString);
      if (result == -1) {
        return false;
      }
      else {
       return true;
      }
    }
    $(function(){
      var source:string ="this is ok";
      var subString1:string ="ok";
      var subString2:string ="not";
      var result:boolean;
      var result1= mySearch(source,subString1);//从 source 字符串上面找 ok,返回值
    是 true
    var result2= mySearch(source,subString2);//从 source 字符串上面找 not,返回
    值是 false
    alert(result1);//
    alert(result2);
    });

    接口定义 Array
    interface StringArray {
      [index: number]: string;
      //length: number;
    }
    var myArray:StringArray;
    myArray = ["Bob", "Fred"];
    $(function(){
      $.each(myArray,function(key,val){
      alert(val);
      });
    })

    class 实现 implements 接口

    interface IClock {
      currentTime: Date;
      setTime(d: Date);
    }
    //--实现 IClock 接口
    class Clock implements IClock{
      currentTime:Date;
      constructor(h: number, m: number) { }//--构造函数方法
      setTime(d:Date){
        this.currentTime=d;
      }
    }
    //--------------------------------------------------
    interface IClock1 {
      new (hour: number, minute: number);
    }
    class Clock1 {
      currentTime: Date;
      constructor(h: number, m: number) { }
    }
    var cs: IClock1 = Clock1;
    var newClock = new cs(7, 30);
    console.log(newClock);

    扩展接口 Extending Interfaces
    interface IShape{
      color:string;
    }
    interface PenStroke {
      penWidth: number;
    }
    //--接口继承接口,用,分割开多继承.
    interface ISquare extends IShape,PenStroke {
      sideLength: number;
    }
    //---赋值..
    var square = <ISquare>{};
    square.color="red";
    square.sideLength=100;
    square.penWidth=50;

    混合型 Hybrid Types

    interface Counter {
      (start: number): string;//声明一个开始变量
      interval:number;//声明一个间隔变量
      reset(): void;//声明一个重置 function 方法
    }
    var c: Counter;
    c(10);//开始.
    c.interval=5.0;
    c.reset();//重置.

    TypeScript 类
    //--这个是简单的 class
    class Employee {
      fullName: string;
    }
    var employee = new Employee();
    employee.fullName = "Long long";//赋值
    //说明这个属性是存在的..
    if (employee.fullName) {
      alert(employee.fullName);
    }
    Ts 文件编译成 js 文件代码
    /// <reference path="../plugins/typescript/typings/jquery.d.ts" />
    //--这个是简单的 class
    var Employee = (function () {
      function Employee() {
      }
      return Employee;
    })();
    var employee = new Employee();
    employee.fullName = "Long long"; //赋值
    //说明这个属性是存在的..
    if (employee.fullName) {
      alert(employee.fullName);
    }

    class使用 constructor super 关键字

    一、-------------------

    class Person{
      userName:string;//声明一个名称
      //构造方法
      onstructor(paramVal:string){
        this.userName=paramVal;
      }
      //--声明一个 getPersonInfo 方法,并在声明 age 变量
      getPersonInfo(age:number=120):string{
        return this.userName+" "+age;
      }
    }
    class Student1 extends Person{
      constructor(username:string){
        super(username);
      }
      getPersonInfo(age=100){
        var superMsg=super.getPersonInfo(age);
        return this.userName+" "+age+"岁"+" "+"默认信息:" +superMsg;
      }
    }
    class Student2 extends Person{
      constructor(username:string){
        super(username);
      }
      getPersonInfo(age=120){
        var superMsg=super.getPersonInfo(age);
        return this.userName+" "+age+"岁"+" "+"默认信息:" +superMsg;
      }
    }
    var stu1=new Student1("周伯通");
    var stu2=new Student2("老毒物");
    var stuMsg1=stu1.getPersonInfo();
    var stuMsg2=stu2.getPersonInfo(80);//传一个默认值给 getPersonInfo 方法

    二、-------------------默认是 public-------

    class MyAnimal {
      private name:string;
      //构造方法
      constructor(private theName : string){
        this.name = theName;
      }
      getMsg(name : string):string{
        return this.name=name;
      }
    }
    //犀牛
    class Rhino extends MyAnimal{
      constructor(){
        super("犀牛");
      }
      getMsg(name : string):string{
        return name;
      }
    }
    //员工
    class Employees {
      private name:string;
      //构造方法
      constructor(theName : string) {
        this.name = theName;
      }
    }
    var animal = new MyAnimal("山羊");//Goat 山羊
    var retMsg1=animal.getMsg("鹿");
    var rhino = new Rhino();
    var employees = new Employees("洪七公");
    animal = rhino;
    //animal = employees;//此时这个值不能赋给 animal,并不能编译通过.

    三、----------- class高级技巧------

    //当您声明一个类,你实际上是在同一时间创建多个声明。第一个是类的实例的类型

    class Greeter {
      static standardGreeting = "Hello, there";
      greeting: string;
      greet() {
        if (this.greeting) {
          return "Hello, " + this.greeting;
        }
        else {
          return Greeter.standardGreeting;
        }
      }
    }
    var greeter1: Greeter;
    greeter1 = new Greeter();
    alert(greeter1.greet());
    var greeterMaker: typeof Greeter = Greeter;
    greeterMaker.standardGreeting = "Hey there!";
    var greeter2:Greeter = new greeterMaker();
    alert(greeter2.greet());

    TypeScript 块
    分多个 ts 文件实现 module (不分文件实现 module ,将其整合在一起)
    Validation.ts 代码

    module Validation{
      export interface StringValidator {
        isAcceptable(s: string): boolean;//是否接受.
      }
    }
    ZipCodeValidator.ts 代码

    module Validation {
      //匹配 0-9 的数字.
      var numberRegexp = /^[0-9]+$/;
      export class ZipCodeValidator implements StringValidator {
        isAcceptable(s: string) {
        //如果长度=5 并且是数字就返回一个 true
        return s.length === 5 && numberRegexp.test(s);
        }
      }
    }
    LettersOnlyValidator.ts 代码

    module Validation {
      //匹配 A-Z,a-z 的英文
      var lettersRegexp = /^[A-Za-z]+$/;
      export class LettersOnlyValidator implements StringValidator {
        isAcceptable(s: string) {
          return lettersRegexp.test(s);
        }
      }

    test-1.ts 代码
    // 声明一个数组.
    var strings = ['Hello', '98052', '101'];
    // 使用这个验证.
    var validators: { [s: string]: Validation.StringValidator; } = {};
    validators['Zip Code'] = new Validation.ZipCodeValidator();//这个是验证邮政
    编码
    validators['Letters only'] = new Validation.LettersOnlyValidator();//这个是
    验证英文
    function showMsg():void{
      //显示每个字符串是否通过每个验证
      strings.forEach(s => {
        for (var name in validators) {
          console.log('"' + s + '" ' + (validators[name].isAcceptable(s) ? '
          matches ' : ' does not match ') + name);
          $("#msg1").html('"' + s + '" ' + (validators[name].isAcceptable(s) ?
          ' matches ' : ' does not match ') + name);
        }//--for--end
      });//--forEach--end
    }
    $(document).ready(function(){
    showMsg();
    });

    import , require 关键字

    某father.ts文件,子son.ts文件 import  father = require('./father');  father.方法   (接口 &实现 结合 :export = 对象)

    不使用 Module,如果我们在 typescript 使用了 module 函数,则生成的代码在
    浏览器端执行时,需要有一些 script loader 的支持。对于浏览器端代码,我们一般生成 amd 风格的代码,所以需要找一个支持 amd 的库放在前端,我这里首选的是 AMD 这样的库有很多,比如1. RequireJS 2. Nodules 3. JSLocalnet 4. curl.js

    不然的话运行这个 html 会报 ReferenceError: define is not defined

     module 别名的使用

    //--声明一个--Shapes 块别名--
    module Shapes {
    //===========================多边形===========================
      export module Polygons {
    //===========================三角形===========================
        export class Triangle {
          side : number = 3;//声明边一个变量,并且给一个默认值..
          theName : string;//声明一个名字
          //声明构造方法--传一个名字的参数..
          constructor(strName : string) {
            this.theName = strName;
          }
          //计算三角形,获取面积,这里为了返回一个构造方法的传进来的字符串,故返回类
          型给了一个 any 类型..
          getTriangleArea(side : number) : any{
            return this.theName+ this.side*side;
          }
        }
    //===========================正方形===========================
        export class Square {
          side : number = 8;//声明边一个变量,并且给一个默认值..
          theName : string;//声明一个名字
          //声明构造方法--传一个名字的参数..
          constructor(strName : string) {
            this.theName = strName;
          }
          //---计算正方形,获取面积
          getSquareArea(side : number) : any{
            return this.theName+ this.side*side;
          }
        }
      }
    }

  • 相关阅读:
    跟踪内核启动过程CONFIG_DEBUG_LL【转自】
    为什么可能导致睡眠的函数都不能在中断上下文中使用呢?【转】
    可重入和不可重入【转】
    中断中处理延时及一些函数的调用规则(中断调i2c驱动有感)--中断中的延迟delay与printk函数的冲突【转】
    Linux时间子系统之八:动态时钟框架(CONFIG_NO_HZ、tickless)【转】
    仿照linux dpm机制,实现自己的dpm【转】
    (二)内核锁的使用之信号量【转】
    linux dpm机制分析(下)【转】
    linux dpm机制分析(上)【转】
    python写一段脚本代码自动完成输入(目录下的所有)文件的数据替换(修改数据和替换数据都是输入的)【转】
  • 原文地址:https://www.cnblogs.com/darrenhwang/p/7089311.html
Copyright © 2020-2023  润新知