TypeScript(一)

目录

1、TS的变量声明

 ·2、变量的类型推断

  3、JS中的类型声明

 ·4、TypeScript的数据类型

       any类型

       unknow类型

       void类型

       never类型

       tuple类型 ---元组  

二、TS的语法细节

       1、 可选类型

       2、 联合查询

       3、类型的别名

       4、 type和interface的区别

       5、交叉类型

       6、类型断言 as(重点)

       7、类型缩小

三、 TS函数类型    

        1、函数调用签名

        2、参数的可选类型

        3、默认参数/剩余参数

        4、可推导的this类型

        5、不确定的this类型                               

        6、函数的重载    

四、TS类的使用

                         


                      

1、TS的变量声明

        声明了类型之后,TS就会去进行类型的检测

    var/let/const 标识符 :数据类型 = 赋值;
    
    let message : string = 'hello world'

 2、变量的类型推断

        默认的情况下,会将赋值的值的类型,作为前面标识符的类型

let age = 18
console.log(age)

const height = 1.88 //类型的字面量1.88
console.log(height)

        注意:使用 let 去声明的变量,推断的就是通用类型

                     使用 const 声明的变量,推断出来的是字面量类型    

  3、JS中的类型声明

        其中number、string、boolean、null、undefined就直接写就可以了

        对于数组和对象,需要去指定每一个具体是声明

// 平时的写法
 let list: number[] = [1,2,3];

// 泛型数组
 let got: Array<number> = [1,2,3];

// 元组 :是代表一个已知元素数量和类型的数组 就是可以放2个不同类型的元素
  let midde: [String,number];
      midde=['Ktton',18];

// 对象
    const user:{
        name:string,
        age:number
    } = {
        name:'crt',
        age:18
    }

 4、TypeScript的数据类型

        any类型

         在一些情况下我们无法一开始就确定一个变量的类型,它可能在中途会出现一些变化,

         所以我们就会去使用any类型

let asg: any = "as写法";
any = 123
any = true
any = {}

       unknow类型

      和any类似,不同的是,unknown类型的值上做任何操作都是不合法的

 let unk :unknown = 'aaa'
     unk = 123
     // console.log(unk.length);//报错
     if(typeof unk === 'string'){
        console.log(unk.length); //3        
    }

        void类型

        跟java一样 没有返回值但是它有形参   

 function sun (num1:number,num2:number){
        console.log(num1+num2);
    }
    sun(20,30)

       never类型

// never跟它的中文意思一样,永不发生
    function foo() :never{
        while(true){}
    }
    function bar():never{
        throw new Error()
    }

        tuple类型 ---元组  

        元组中每个元素都有自己特性的类型,根据索引值获取到的值可以确定对应的类型      

    let arr1 :any[] = ['zxy',18,true]
    let arrAge = arr1[1]; //后面会详细讲

二、TS的语法细节

         1、 可选类型

                可以去指定某个属性是否可选(或者不传),加个?就解决

 function print(point:{x:number; y:number; z?:number}){
            console.log(point.x);
            console.log(point.y);
            console.log(point.z);
        }
 // 直接传值
        console.log({x:123}); //因为y并没有设置是否可传 所以就会报错
        console.log({x:123,y:321}); //123,321

       2、 联合查询

                联合类型意思就是可以指定多个类型,表示可以是这些类型中任何一个值

function move(id:number | string){
            // 应用场景:如果我们想要到id的长度那么,我们就要去类型进行指定
            if(typeof id === 'string'){
                console.log(id.length);
            }else{
                console.log(id);
            }
        }
        move(123)
        move('abc')

        3、类型的别名

                使用type关键字  或者是interface(接口)          

  type Idtype = String | number
        function getid(id:Idtype){
            console.log(id);
        }

        type pointType = { x: number; y: number; z?: number }
        function printPoint(point: pointType) {
          console.log(point.x)
          console.log(point.y)
          console.log(point.z)
        }

       4、 type和interface的区别

/*区别在于type类型的使用范围更广,interface只能声明对象
          但是interface在声明对象的时候可以去进行追加
          而且interface支持继承,继承的效果跟追加是一样的
        */ 
          interface Person{name:string,age:number}
          interface Son extends Person{habit:string}
          const  familed:Son = {name:'丹尼',age:18,habit:'孩子'}

        5、交叉类型

                交叉相当于就是满足多个类型条件,交叉类型使用&符号

 interface man {
            name:string
        }
        interface work{
            work:()=>void
        }
        const me1:man|work={
            name:'zzy'
        }
        const me2:man&work={
            name:'zzy',
            work:()=>{console.log('吃');
            }
        }
        // 也可以用type关键字去进行别名
        type Iperson = man&work

        6、类型断言 as(重点)

                可以手动改来指定一个值的类型,允许变量从一种类型更改成另一种类型,但是这个转换的类型只能是 更具体 || 不太具体 可以防止不可能的强制转换

let myvalue :any = "hello world";
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值