TypeScript 基础类型(一)

简介

它是 JavaScript 的超集,具有静态类型检查和面向对象编程的特性。TypeScript 的出现,为开发者提供了一种更加严谨和高效的开发方式。

主要特点:

  1. 、静态类型检查。

通过静态类型检查,开发者可以在编译时发现错误,而不是在运行时。这有助于减少调试时间,提高代码质量。TypeScript 支持多种类型注解,包括基本类型(如 number、string、boolean 等)、数组、元组、枚举、接口、类等。

  1. 面向对象编程

支持类、接口、继承、多态等面向对象编程的核心概念。开发者可以使用 TypeScript 编写更具结构性和模块化的代码,提高代码的复用性和可维护性。此外,TypeScript 还支持装饰器(Decorators),这是一种用于类和方法的元数据注解,可以用于实现依赖注入、日志记录、权限控制等功能。

基础类型

首先需要生成一个ts的配置文件

Tsc --init

使用 BigInt 等ES6新增的,需要在配置文件lib中添加配置

  "lib": [
      "ES2022",
      "dom"
    ],       
  • 布尔、数字、字符串

类型小写用于基本类型,大写的类型都是包装类(实例对象等)

let name:string = "smz"
let age:number = 18
let handsome:boolean = true
  • 数组
let arr1: number[] = [1, 2, 3]
let arr2: Array<number> = [1, 2, 3]
let arr3: (number | string)[]= [1, 2, 3, '4']
let arr4: Array<number | string> = [1, 2, 3, '4']
  • 元组
    规定长度和存储的类型

添加只能添加元组中存在的类型,但是不能调用,因为不确定是否存在这个值

let tuple1: [number, string, boolean] = [1, '2', true]
tuple1.push(1)
tuple1.push('3')
tuple1.push(false)
// tuple1[3] // 不能使用后添加的值
  • 枚举

自带类型的对象,自动增长,数字类型的枚举 可以反举,可以直接赋值,后面的会根据上一个自动推断自身值

知道名称,不知道值: const enum<名称> {}
使用:<枚举名称>.<名称>

知道值,不知道名称(反举):enum <名称> {}
使用: <枚举名称>[<值>]

enum UserType {
    Admin,
    User,
    Guest
}

console.log(UserType.Admin)

enum UserType2 {
    Admin = 0,
    User= 1,
    Guest = 2
}
let userItem:string = UserType2[1]
console.log(userItem)
  • any
    任意值

在不清楚是什么类型的时候用 any

let notSure: any = 4;
notSure.toFixed();
  • Object
    所有

与any类似,但是 Object 类型的变量不允许调用任何方法,有也并不能调用

let prettySure: Object = 4;
 prettySure.toFixed(); //  Property 'toFixed' does not exist on type 'Object'.
  • void
    空值

表示没有任何类型,当函数没有返回值时,使用void

function warnUser(): void {
    alert("This is my warning message");
}

  • Undefined 和 Null
    Undefined :不存在以后也不存在 Null:不存在以后可能存在
let u: undefined = undefined;
let n: null = null;
  • never
    永不存在类型

never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型;可以用来做代码完整性检测

function error(message: string): never {
    throw new Error(message);
}
function infiniteLoop(): never {
    while (true) {
    }
}
// 类型保护
function valiData(val: string | number) {}
function getResult(srtgrOrNum: string | number | boolean){
    if (typeof srtgrOrNum ==='string') {
        return srtgrOrNum;
    }
    if (typeof srtgrOrNum === 'number') {
        return srtgrOrNum;
    }
    // if (typeof srtgrOrNum === 'boolean') {
    //     return srtgrOrNum;
    // }
    // 永远不能到达这一步,到这一步说明方法缺失逻辑
     valiData(srtgrOrNum) // Argument of type 'string | number | boolean' is not assignable to parameter of type 'never'.   Type 'string' is not assignable to type 'never'.
}
  • Symbol
    永远唯一
let symbol1:symbol = Symbol("1")
let symbol2:symbol = Symbol("1")
console.log(symbol1 === symbol2) // false
let symbol3:symbol = Symbol.for("1") // 根据key找
console.log(symbol1 === symbol3) // true
  • BigInt
    长整型
let b1:bigint = BigInt(Number.MAX_SAFE_INTEGER + 100000)
console.log(b1)

类型推断

- 基本

在有些没有明确指出类型的地方,类型推论会帮助提供类型

let a = 1
let y ='2'
let z = true

在这里插入图片描述

  • 最佳通用类型

需要从几个表达式中推断类型时候,会使用这些表达式的类型来推断出一个最合适的通用类型

let x = [0, 1, null];

在这里插入图片描述

  • 上下文类型

TypeScript类型推论也可能按照相反的方向进行。 这被叫做“按上下文归类”。按上下文归类会发生在表达式的类型与所处的位置相关时。

window.onmousedown = function(mouseEvent) {
    console.log(mouseEvent.button);
};

window.onmousedown = function(mouseEvent: any) {
    console.log(mouseEvent.button);
};

在这里插入图片描述

  • 联合类型

联合类型的变量只能访问公共方法,除非在使用方法前对变量已经赋值了。

let name: string | number ;
name.toFixed(); 

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/79c0bd86224c4ce7913fca2c963b9ce4.png

类型定义

使用 type 关键字定义自己的类型

type Person = '男' | '女' | '其它'
let person: Person = '男'

也可以通过对象属性和联合类型做互斥(可辨识联合类型)

type Person2 =
    {
        weal: true,
        waste: string
    }
    |
    {
        weal: false,
        waste: number
    }

let person2: Person2 = {
    weal: true,
    waste: '123'
}
let person3: Person2 = {    
    weal: false,
    waste: 123
}

断言

断言就是,让代码绕过TS检查

  • 非空断言

指定其不可能为空

let ele = document.getElementById('app')
// 方式1
ele!.style.color ='red'
// as 断言
(ele as HTMLDivElement).style.color ='red'
  • 双重断言

将某个值通常断言成 any 再断言成 其他类型,any类型可以赋值给任何类型

let str: string | number
let boo = (str! as any) as boolean

相关推荐

  1. TypeScript系列」TypeScript 基础类型

    2024-07-15 07:22:01       29 阅读
  2. TypeScript 第二节:基础类型

    2024-07-15 07:22:01       47 阅读
  3. TypeScript基础类型系统介绍

    2024-07-15 07:22:01       31 阅读
  4. TypeScript 基础知识:基本数据类型

    2024-07-15 07:22:01       55 阅读
  5. TypeScript基础知识:类型守卫和类型推断

    2024-07-15 07:22:01       62 阅读
  6. TypeScript基础类型和高级类型梳理总结

    2024-07-15 07:22:01       39 阅读
  7. Typescript基础知识:函数类型和箭头函数

    2024-07-15 07:22:01       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 07:22:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 07:22:01       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 07:22:01       58 阅读
  4. Python语言-面向对象

    2024-07-15 07:22:01       69 阅读

热门阅读

  1. [Spring Boot]定时任务因系统时间修改之后无法执行

    2024-07-15 07:22:01       20 阅读
  2. Redis避坑疑难杂症

    2024-07-15 07:22:01       20 阅读
  3. Leetcode【零钱兑换】

    2024-07-15 07:22:01       27 阅读
  4. 配置提交节点

    2024-07-15 07:22:01       24 阅读
  5. 【信息收集】 IP信息收集

    2024-07-15 07:22:01       20 阅读
  6. 线程同步的使用(一)

    2024-07-15 07:22:01       26 阅读
  7. lvs集群

    lvs集群

    2024-07-15 07:22:01      27 阅读
  8. Bootstrap 栅格系统的工作原理?

    2024-07-15 07:22:01       24 阅读