typeScript --基础数据类型

版权声明:版权声明:本文为博主原创文章,若文章中有错误请联系博主改正,请不要恶意留言(不喜欢请绕道)。欢迎大家转载 https://blog.csdn.net/qq_37674616/article/details/83962361

目录

基础类型

         javascript基础类型 

typescript扩展类型

高级类型

交叉类型

联合类型

类型保护与区分类型

可辨识联合


基础类型

javascript基础类型 

基础类型 类型名称 示例
布尔 boolean let  gender:boolean=false 
数字 number let  age:number=8   
字符串 string let firstName:string='吴';let lastName='晨'; fullName:string=`${firstName} ${lastName}`
数组 T[]或Array<T> let season:string[]=['Spring','Summer']
null null let aNull=null
undefined undefined let aUndefiend=undefined
对象 object const mary={name:'Mery',age:18}   // typeof mary==='object'
symbol symbol const  aSymbol:symbol=Symbol()

注意:

1. 数字类型都是浮点型,不区分整数和浮点数

2. 字符串有三种表示方法:"双引号"、'单引号'、`反引号`

typescript扩展类型

基础类型 类型名称 示例
元组 tuple let aTuple:[string,number]=['cc',age:24]
枚举 enum enum Color={Red,Green,Blue}    const green=Color[1]
任意值 any let notSure: any = 4;   notSure = "maybe a string instead";    notSure = false;
空值 void function f(name:string):void{console.log(name)}
Never never function error(message: string): never { throw new Error(message); }

注意:

1. 元组实际上是数组,可以使用多值赋值,不同类型的元组不同互相赋值

2. 枚举类型默认是0开始的数值列表,也可以指定值;枚举类型名作为数组可以获取字符串类型的枚举值(不推荐使用)

3. any表示在编程阶段还不清楚的类型,这可能来自于动态的内容,比如来自用户输入

4. void 一般用于表示函数没有返回值

5. never 表示用不存在的值的类型,如抛出异常、死循环等

高级类型

交叉类型

1.交叉类型是将多个类型合并为一个类型,包含所需要的所有类型的特性

联合类型

  • 它表示一个值可以是几种类型之一
    • 用竖线(|)分割开每个类型,表示该值可以是其中的某一个类型
    • 如果一个值是联合类型,我们只能访问此联合类型公共的成员
interface Bird{
    flay();
    layEggs();
}
interface Fish{
    swim();
    layEggs();
}
function getSmallPet():Fish | Bird{
    //...
}
let pet=getSmallPet();
pet.layEggs(); //ok
pet.flay();// 错误
//如果我们用成员去访问都会报错,此时应该避免报错
//所有要使用类型保护

类型保护与区分类型

1.使用类型断言的类型保护

2.使用typeof的类型保护

3.使用instanceof的类型保护

4.使用自定义的类型保护

interface Bird{
    fly();
    layEggs();
}
interface Fish{
    swim();
    layEggs();
}


//使用断言的类型保护
function move(pet:Bird | Fish){
    (<Fish>pet).swim():(<Fish>pet).swim():(<Bird>pet).fly();
}

//使用typeof的类型保护
function process(data:string | number):string{
    if(typeof data==='string'){
        //...    
    }else{
        //...
    }
}


//使用instanceof的类型保护
function process(data:string | number):string{
    if(data instanceof String){
        //...    
    }else{
        //...
    }
}

//自定义保护类型
function isFish(pet: Fish | Bird): pet is Fish{
    return (<Fish>pet).swim !==undefiend;
}

可辨识联合

单例类型,联合类型,类型保护和类型别名来创建一个叫做 可辨识联合的高级模式,它也称做 标签联合或 代数数据类型。 可辨识联合在函数式编程很有用处。 一些语言会自动地为你辨识联合;而TypeScript则基于已有的JavaScript模式。 它具有3个要素:

  • 具有普通的单例类型属性— 可辨识的特征
  • 一个类型别名包含了那些类型的联合— 联合
  • 此属性上的类型保护。
interface Square{
    kind:'square';
    size:number;
}
interface Rectangle{
    kind:'rectangle';
    width:number;
    height:number;
}
type Shape=Square | Rectangle;
function area(s:Shape){
    switch(s.kind){
        case:'Square': return s.size * s.size;
        case:'Rectangle': return s.width * s.height;
    }
}

参考文档: typescript 官方文档

猜你喜欢

转载自blog.csdn.net/qq_37674616/article/details/83962361