美文网首页
TS学习笔记

TS学习笔记

作者: 池鱼_故渊 | 来源:发表于2019-08-06 11:38 被阅读0次

    1.环境搭建

    1.安装node.js,百度搜索node官网下载node,然后安装,过程比较简单,不再赘述

    2.下载typescript包。

        npm install typescript -g
    
        tsc --version
    
    

    出现版本号,说明安装成功。

    2.初试typescript

    1.初始化项目npm init -y,
    2.输入命令tsc --init生成tsconfig.json文件,这是一个typescript的配置文件
    3.安装@type/node,主要事解决模块声明文件类型问题。
    4.创建一个helloworld.ts文件,输入以下内容

    var name:string = "你的名字"
    console.log(name)
    

    5.输入tsc命令,会生成一个helloworld.js文件
    6.然后运行文件node helloworld.js,此时就会看到打印内容

    3.typescript的类型

    1.undefind:定义了类型(任何类型),但是没有赋值,都是undefind的类型
    2.number:就事常见的数字类型
    3.string:双引号或者单引号内的内容都是字符串
    4.boolean:布尔类型,和js一样trueorfalse
    5.array:数组类型
    6.eumn:枚举
    7.any:任意类型
    8.void:空类型
    9.null:空类型
    10.tuple:元祖类型

    4.typescript的函数定义方式

    1.函数声明法

    function search(age:number):string{
      return '多大了?'+ age + '岁了'
    }
    console.log(search(18))
    //打印出:多大了?18岁了
    

    2.函数表达式法

    let search = function(age:number):string{
      return '多大了?'+ age + '岁了'
    }
    console.log(search(18))
    //打印出:多大了?18岁了
    

    3.箭头函数

    let search = (age:number):string =>{
      return '多大了?'+ age + '岁了'
    }
    console.log(search(18))
    //打印出:多大了?18岁了
    

    5.typescript函数参数

    1.定义函数要加function
    2.函数的参数可有可无,多个参数之间用逗号隔开
    3.函数返回值可有可无,没有返回值,返回类型是void
    4.每个参数由名字和类型组成,之间用分号(:)隔开

    例如:

    function search(age:number):string{
      return '多大了?'+ age + '岁了'
    }
    console.log(search(18))
    //打印出:多大了?18岁了
    

    参数:
    1.可以定义一个可以传也可以不传的参数,通过?来标记
    例如:

    function search(age:number,name?:string):string{
      if(name!==undefined){
        return '我叫'+ name +'多大了?'+ age + '岁了'
      }else{
        return '多大了?'+ age + '岁了'
      }
    }
    

    2.可以给参数添加默认值,不传值的时候就使用默认的值
    例如:

    function search(age:number=20,name?:string="佚名"):string{
      if(name!==undefined){
        return '我叫'+ name +'多大了?'+ age + '岁了'
      }else{
        return '多大了?'+ age + '岁了'
      }
    }
    

    3.传递不确定个数的参数时,可以定义一个数组接收
    例如:

    function search(...species:string[]):string{
       var yy:string = '找到了'
       for(let i=0;i<species.length;i++){
           yy = yy + species[i]
           if(i<species.length){
               yy=yy+"、"
           }
       }
       yy=yy+'的小姐姐'
       return yy
    }
    var result:string = search('22','肤白','貌美','大长腿')
    console.log(result)
    

    6.数组

    1.数组的声明方式

    let arr1:number[]//声明一个数值类型的数组
    let arr2:Array<string>//声明一个字符串类型的数组
    
    

    2.对数组进行赋值

    let arr1:number[] = []
    let arr2:number[] = [1,2,3,4]
    let arr3:Array<string> = ['你好','数组']
    let arr4:Array<boolean> = [true,false,true]
    

    注:定义一种类型的数组,数组内只能存储一种类型元素

    3.构造函数赋值

    let arr1:number[]= new Array()
    let arr2:number[]= new Array(1,2,3,4)
    let arr3:Array<string> = new Array('你好','数组')
    

    4.元祖

    let arr1:[string,number,boolean]
    //正确的初始化
    arr1 = ['你好',1,true]
    //错误的初始化
    arr1 = [1,true,"你好"]
    

    注:元祖类型表示一个已知数量和类型的数组,各元素的类型可以不相同,

    7.引用字符串

    1.基本类型字符串:用单引号或者双引号括起来得一串字符串
    2.引用类型字符串:用new实例化字符串类型

    let str:string = "1231"
    let str:String = new String('123123')
    

    3.字符串长度得获取

    let str:string = '123123'
    console.log(str.length)//直接加length
    

    4.查找字符串

    let str:string = '12313你好21231'
    let str1:string = '你好'
    console.log(str.indexOf(str1))  // str.indexOf(str1)基本语法,从前向后找,如果没有找到返回 -1,返回值是字符串得下标
    console.log(str.lastIndexOf(str1))//从后向前找
    

    5.替换字符串

    str.replace(subStr,newStr) //subStr表示被替换得字符串,newStr表示要替换得字符串
    

    6.字符串的截取

    str.substring(startIndex,[endIndex])
    //startIndex表示开始的下标,endIndex表示结束的下标,可选可不选,
    

    8.引用日期对象

    1.创建日期时,需要声明Date()类型

    let time:Date = new Date()
    console.log(time) // 打印出当前日期
    

    2.传递一个整数

    let time:Date = new Date(1000) 
    console.log(time) //打印出1970-01-01T00:00:01.000Z  
    //这个整数代表距离1970-01-01 00:00:00的时间
    

    3.传递字符串

    let time:Date = new Date('2019-08-01 17:18:00')
    console.log(time)//打印出输入的时间,还有2019/08/01和2018-08-01T02:30:00两种格式。
    

    4.传递年月日时分秒的变量

    let time:Date = new Date(year,month,day,hours,minutes,seconds,ms)
    

    9.引用正则

    1.字面量法

    let reg:RegExp = /123/
    let res:RegExp = /123/gi   //g全局的意思  i忽略大小写
    

    2.构造函数法

    let reg:RegExp = new RegExp('123')
    let reg:RegExp = new RegExp('123','gi')
    

    10.类的声明和使用

    和es6的类的使用基本相同,只是每个属性要加上类型

    class Hello{
      name:string;
      age:string;
      constructor(name:string,age:number){
        this.name = name
        this.age = age
      }
      say(){
        console.log('你好')
      }
    }
    let wj:Hello = new Hello('小红',18)
    wj.say()
    

    11.修饰符

    1.public:公有修饰符,可以在类内或者类外使用public
    2.protected:受保护的修饰符,可以在本类或者子类中使用
    3.private:私有修饰符,只可以在类内使用private

    class  Helloworld{
      public name:string
      protected weight:string
      private age:number
      public constructor(weight:string,name:string,age:number){
        this.name = name
        this.weight = weight
        this.age = age
      }
      public sayHello(){
        console.log('你好')
      }
      protected sayName(){
        console.log('林缘')
      }
    
    }
    var wj:Helloworld = new Helloworld('林缘','80kg',25)
    console.log(wj.name)
    console.log(wj.weight)//报错
    console.log(wj.age)//报错
    
    wj.sayHello()
    wj.sayName()//报错
    

    12.类的继承

    创建类的时候继承一个已存在的类,这个已经存在的类成为父类,
    继承的称为子类,类的继承使用关键字extends,子类除了不能继承父类的私有成员方法和属性,其他的都可以继承。

    class Shap{
      Area:number
      constructor(a:number){
        this.Area = a
      }
    }
    
    class Circle extends Shape{
      disp():void{
        console.log("圆的面积:"+this.Area)
      }
    }
    var obj = new Circle(223)
    obj.disp()
    

    1.子类只能继承一个父类,不能继承多个类,但是可以多重继承

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

    2.类继承后,子类可以对父类的方法重新定义,这个过程叫重写,
    其中super关键字是对父类的直接引用,该关键字可以引用父类的属性和方法

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

    3.static关键字用于定义类的数据属性和方法为静态的,,静态成员可以直接通过类名调用

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

    注:文章内容参考菜鸟教程和技术胖

    相关文章

      网友评论

          本文标题:TS学习笔记

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