typeScript --基础数据类型

这篇博客详细介绍了TypeScript的基础数据类型,包括JavaScript的基础类型及其扩展,如元组和枚举。此外,还深入探讨了高级类型,如交叉类型、联合类型,以及类型保护和可辨识联合的概念,提供了类型系统的深入理解。
摘要由CSDN通过智能技术生成

目录

基础类型

         javascript基础类型 

typescript扩展类型

高级类型

交叉类型

联合类型

类型保护与区分类型

可辨识联合


基础类型

javascript基础类型 

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

注意:

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

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

typescript扩展类型

基础类型类型名称示例
元组tuplelet aTuple:[string,number]=['cc',age:24]
枚举enumenum Color={Red,Green,Blue}    const green=Color[1]
任意值anylet notSure: any = 4;   notSure = "maybe a string instead";    notSure = false;
空值voidfunction f(name:string):void{console.log(name)}
Neverneverfunction 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 官方文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值