TypeScript 基本类型

364 阅读4分钟

这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战

TypeScript 基本类型

1. 类型声明

类型声明是TS非常重要的一个特点,通过类型声明可以指定TS中变量、参数、形参的类型。

指定类型之后,当为变量赋值时,TS编译器会自动检查值是否符合类型声明,符合则赋值,否则报错。

简而言之,类型声明就是给变量设置了类型,使得变量只能存储某种类型的值。

2. 基本类型

类型例子描述
number1, -33, 2.5任意数字
string'hi', "hi", hi任意字符串
booleantrue、false布尔值true或false
字面量其本身限制变量的值就是该字面量的值
any*任意类型
unknown*类型安全的any
void空值(undefined)没有值(或undefined)
never没有值不能是任何值
object{name:'孙悟空'}任意的JS对象
array[1,2,3]任意JS数组
tuple[4,5]元素,TS新增类型,固定长度数组
enumenum{A, B}枚举,TS中新增类型

3. 类型声明使用示例

  • number、string、boolean

    // 一 :先声明 后赋值
    // 声明一个变量a,同时指定它的类型为number,在之后a 的使用中必须是number类型
    var a;
    a = 20;
    a = 10;
    // a = 'hello' // 此句会报错,前面一定指定了a 的类型为number
    
    // 字符串类型
    var b;
    b = 'hello';
    b = '12213';
    //b = 111 //此句会报错,因为前面一定指定了b 的类型为string ,现在却赋值的是数字
    
    
    // 二:声明完直接赋值
    var c = true;
    c = false;
    // c = 123 // 报错 之前c 已经 声明为boolean类型了
    
    
    // 三:只赋值不声明   如果变量的声明和赋值是同时进行的,TS可以自动对变量进行类型检测
    var d = 123;
    d = 222;
    // d = false // 报错  虽然之前没有声明类型 ,但TS 会自动将第一次d 的赋值类型判断为默认类型
    

    TS拥有自动的类型判断机制,当对变量的声明和赋值是同时进行的,TS编译器会自动判断变量的类型。

    所以如果的变量的声明和赋值是同时进行的,可以省略掉类型声明。

  • 字面量

    // 可以直接使用字面量进行声明
    let a: 10;
    a = 10;
    // a = 11;  报错
    
    // 可以使用 | 来连接多个类型(联合类型)
    let b: boolean | string;
    
    b = true;
    b = '12';
    
  • any 类型

    // any 类型   表示对变量没有任何显示,编译器失去了对 TS 的检测功能(不建议使用)
    let c: any;
    c = true;
    c = 123;
    c = 'dsas';
    let s: string;
    s = c; // any 类型的c  可以赋值给任何类型的变量
    
    // 变量声明没有指定类型,则TS解析器会自动判断变量的类型为 any  (隐式的any)
    let d;
    d = true;
    d = 123;
    d = 'dsas';
    
  • unknown 未知类型

    // unknown 表示未知类型   
    let e: unknown;
    e = 123;
    e = false;
    e = 'dsas';
    
    // unknown 实际上就是一个类型安全的any  该类型的变量不能直接赋值给他变量
    // 想赋值给其他变量的方法如下:
    if (typeof e === 'string') {
        s = e
    }
    
    // 或者使用  类型断言   可以用来告诉解析器变量的实际类型
    /* 
        * 语法:
            * 变量 as 类型
            * <类型>变量
    */
    s = e as string;
    s = <string>e;
    
  • void 空值

    // void 表示空值  返回值为空 可以为undefined  null 
    function fn (): void {
        // return 123;
        return;
    }
    
  • never 没有值

    // never 表示没有值 永远不会返回结果  不能为任何值 (用的较少)
    function fm (): never {
        throw new Error('报错了!');
    }
    
  • object 对象

    // 1. object 表示一个js 对象
    let v: object;
    v = {};
    v = function () { };
    
    // {} 用来指定对象中可以包含哪些属性
    // 语法:{属性名:属性值,属性名:属性值}
    // 在属性名后加 ? 表示属性是可选的
    let n: { name: string, age?: number }
    n = { name: '上完课', age: 12 }
    n = { name: '上完课' }
    
    // [propName:string]:any 表示任意类型的属性 propName是随意命名的
    let x: { name: string, [propName: string]: any }
    x = { name: 'asd', age: 23 }
    
    
    
    // 2. 设置函数结构的类型声明
    //  语法:(形参:类型,形参:类型...)=> 返回值
    let f: (a: number, b: number) => number
    f = function (n1, n2): number {
        return n1 + n2
    }
    
    
  • array 数组

    // 3. 数组  语法:类型[]   
    let g: string[]
    g = ['1', '2']
    // ② Array<number> 
    let k: Array<number>
    k = [1, 2, 3]
    
  • tuple 元组

    //  元组 元组就是固定长度的数组  新增类型
    // 语法: [类型,类型,类型]   类型和长度必须一致
    let u: [string, number]
    u = ['12', 12]
    
  • enum 枚举

    //  enum 枚举   新增类型
    enum Gender {
        Male = 0,
        Female = 1
    }
    let i: { name: string, gender: Gender };
    i = {
        name: '孙悟空',
        gender: Gender.Male
    }
    console.log(i.gender === Gender.Male)