在学TS

在学TS

编译环境就不提了
typescript基础类型:boolean,string,array,enum,void,any

  • 多行字符串:给字符串赋值的时候,用“把字符串包起来

    1. 字符串里面可以直接enter换行了
    2. 在“里可以使用${}语法,{}里可以是变量也可以是调用函数
    3. 字符串自动切分
      function test(template,name,age){}
      var myname="Ming";
      var getAge=function(){
          return 10;
      }
      test(`Hello! My name is ${myname}, I`m ${getAge}`)

    自动给test函数划分传参:template为一个数组[“Hello! My name is “,”, I`m “,”“],name为”Ming”,age为10

  • 给变量赋予类型

    var myname:string="Ming"var test="test";

    像上面那样用:类型,来给变量赋予类型,这里我定义了一个string变量,给这个变量赋予其他类型的值,如10,就会报错。
    如果没有设置类型,如上面的test。在你第一次给这个变量赋值的时候,编译器也会自动给这个变量赋一个所给的值的类型。
    如果真的想像JS里面的变量一样,让myname又可以等于“Ming”,又可以等于10,可以给他赋一个类型any
    除了可以给变量赋类型,也可以给函数返回值,函数的传入参数设置类型

  • 可以自己定义一个类

    class Person{
        name:string;
        age:number;
    }

    然后就可以定义一个这个类的变量了

  • 函数参数

    1. 设置默认参数
      ts
      function test(a:string,b:string="Hello"){}

      这样一来,如果只用一个参数调用test,比如test(“Hey”),b就会自动等于Hello
    2. 设置可选参数
      ts
      function test(a:string,b?:string,c:string="Hello"){}

      在参数后面加个?,代表这个参数是可选参数,可以不写(函数里面要分可选参数没写的情况)
      可选参数和默认参数都要写在必选参数后面
  • 传任意参数

    function fun(...args){}

    传进去的参数会形成一个数组args
    同样,固定参数的函数也可以穿进去任意参数

    function fun(a,b){}
    var args=[1,2,3,4,5];
    fun(...args);
  • 有断点的函数

    function* test(){
        console.log("start");
        yield;
        console.log("finish");
    }
    var func1=test();
    func1.next();
    func1.next();

    定义函数时必须有*,yield用来设置断点。定义完函数后,不能直接调用test(),要定义一个变量等于test(),然后用next()来调用函数,这时候函数会开始执行到下一个断点。
    另一种用法:

    function* getPrice("goods"){
        while(true){
            yield Math.random()*100;
        }
    }
    var priceGenerator=getPrice("apple");
    var limitPrice=15;
    var price=100;
    while(price>limitPrice){
        price=priceGenerator.next().value;
        console.log("the generator return ${price}");
    }
    console.log("buying at ${price}");

    函数看起来是死循环,但是有一个断点,通过不断对调用next()来调用函数。在这里,每调用一次函数,函数的value就会等于一个0~100的随机数,当目的达到后,就停止调用函数。

  • 析构表达式:

    1. 从对象里获取特定变量
      function getStock(){
          return {
              code:"IBM",
              price:{
                  price1:200,
                  price2:400
              },
              aaa:"xixi";
          }
      }
      /*var {code,price}=getStock();*/ 
      var (code:codex,price:{price1})=getStock();

    函数返回一个对象,可以像注释里面那样直接用两个变量获取里面相同变量名的值。如果想起不一样的变量名,比如函数里面变量名是code,我想用codex来接住code的值,可以用code:codex来实现;如果函数返回的值有嵌套,我想要price这个对象里面的price1,可以用price:{price1}来实现,这样就生成了一个price1变量来接住函数返回值里的price1的值。

    1. 从数组里获取特定变量
      var array1=[1,2,3,4];
      var [a_number1,a_number2]=array1;
      var [b_number1,,,b_number2]=array1;
      var [c_number1,c_number2,...other]=array1;

    用第一行获取代码,a_number1=1,a_number2=1;如果想直接获取数组后面的变量,可以像第二行代码,用若干个”,”,将b_number2放到对应的位置;如果想用一个数组来接住原数组剩下的变量,就用…other的形式,上面执行后,other=[3,4]

  • 箭头表达式
    用来声明匿名函数

    var (art1,art2) => art1+art2;

    如果函数不只一句话,还是得写{}和return

  • for of循环
    旧的循环foreach,for in 新的循环for of

    var myArray=[1,2,3,4];
    myArray.desc="four number";
    myArray.foreach(value => console.log(value));/*1,2,3,4*/
    for(var n in myArray){/*0,1,2,3,desc*/
        console.log(n);
    }
    for(var n in myArray){/*1,2,3,4,four number*/
        console.log(myArray[n]);
    }
    for(var n of myArray){/*1,2,3,4*/
        console.log(n);
    }
    for(var n of myArray){/*1,2*/
        if(n>2)break;
        console.log(n);
    }
    for(var n of "four number"){/*f,o,u,r, ,n,u,m,b,e,r*/
        console.log(n);
    }
    1. foreach和for of都会忽略用户自己新定义的desc属性
    2. for in里头的n是数组下标或者属性,要通过maArray[n]来调用才能得到里面的值
    3. for of支持中途break,而且可以对数组以外的对象使用,例如字符串
  • 类的声明和继承

    1. 声明
      class people{
          constructor(name:string){
              this.name=name;
          }
          name;
          /*
          constructor(public name:string){
              this.name=name;
          }
          */
          eat(){
              console.log("I`m eating");
          }
      }

    与C++不同的地方

    • 类里面的元素属性默认是public
    • 定义方法/元素直接写名字
    • 构造函数用constructor
    • 可以直接在构造函数的参数里面定义元素(方法:用public或其他关键字定义元素属性),注释的代码跟上面的代码是等价的
      1. 继承
    • 关键字extends,继承都是默认公有继承
    • 子类构造函数中必须调用父类的构造函数,用super()调用,调用其他函数则用super.函数名()调用
    • 可以用子类变量给父类变量赋值,例:一个变量类型是水果,可以给它赋值成苹果,反过来则不行
      多态实现方法与c++一致
  • 泛型

    class Person{
        constructor(){
    
        }
    }
    var man:Array<Person>=[];

    用Array<>的形式声明一个只能放这个类型的数组

  • 接口
    关键字implements

    1. 接口的变量:自动检查类型
      当接口作为函数参数的类型,在调用函数时,系统会自动检测当前参数是否符合这个接口类型
    2. 接口的函数:子类必须实现
      当接口声明了方法,一个类继承了这个接口,这个类就必须给接口的所谓方法实例化
  • 模块
    一个文件就是一个模块

    1. 向外提供变量/方法/类/接口
      关键字export,在变量/方法/类/接口最前面加上export,它们就可以被其他文件使用

      /*文件a.ts*/
      export var a1;
      export function func1(){
      
      }
    2. 使用其他文件的东西
      关键字import,有时候也可以不写,直接调用别的文件的变量,系统会自动添加。

      /*文件b.ts*/
      import {a1,func1} from "./a";/*如果不写,在调用变量a1的时候,系统会自动写这行代码*/
      var a2=a1;
      func1();
  • 装饰器
    和angular有关,暂时不懂

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值