TypeScript快速梳理

news2024/12/31 0:49:08

为何需要TypeScript

ts存在静态类型检查:在代码运行前进行检查,发现代码的错误或不合理之处,减少运行时异常的出现的几率,此种检查叫静态类型检查, TypeScript的核心就是静态类型检查,简言之就是把运行时的错误前置。

同样的功能,typescript的代码量要大于JavaScript,但由于typescript的代码结构更加清晰,在后期代码的维护中typescript却远胜于JavaScript

编译typescript

浏览器不能直接运行typescript代码,需要编译为JavaScript再交由浏览器解析器执行。

类型总览

JavaScript中的数据类型:

string、number、Boolean、null、undefined、bigint、symbol、object(array、function、date、error)

typescript中的数据类型:

  1. 上述所有JavaScript类型
  2. 六个新类型
  3. any
  4. unknown
  5. never
  6. void
  7. tuple元组
  8. enum枚举
  9. 两个用于自定义类型的方式
  10. type
  11. interface

any

含义:任意类型,一旦将变量类型限制为any,那就意味着放弃了对该变量的类型检查

//明确的表示a的类型是any-【显式any】
let a:any
//以下对a的赋值,均无警告
a = 100
a = '你好'
a = false

//没有明确的表示b的类型是any,但TS主动推断出来b是any-【隐式any】
let b
//以下对b的赋值,均无警告
b = 100
b = '你好'
b = false

注意:any类型的变量,可以赋值给任意类型的变量

let c:any
c = 9
let x: string
x = c //无警告

unknown

含义:未知类型

  1. unknown可以理解为一个类型安全的any,适用于:不确定数据的具体类型
  2. unknown会强制开发者在使用之前进行类型检查,从而提供更强的类型安全性
  3. 读取any类型数据的任何属性都不会报错,而unknown正好与之相反

never

含义:任何值都不是,简言之就是不能有值,undefined、null、‘ ’、0都不行

  1. 几乎不用never去直接限制变量,因为没有意义
  2. never一般是typescript主动推断出来的
  3. never也可用于限制函数的返回值

void

void通常用于函数返回值声明,含义:【函数返回值为空,调用者也不应依赖其返回值进行任何操作】

function logMessage(msg:string):void{
  console.log(msg)
  return undefined   //无警告
}
logMessage('你好')

注意:没有编写return去指定函数的返回值,所以logMessage函数是没有显式返回值的,但是会有一个隐式返回值,就是undefined;即:虽然函数返回类型为void,但也可以接受undefined。undefined是void可以接受的一种”空“

  1. 函数是可以返回undefined的,至于显示返回,还是隐式返回,都无所谓
  2. 函数调用者不应关心函数返回的值,也不应依赖返回值进行任何操作,即使返回了

声明函数类型

let count:(a:number,b:number=> number
count = function(x,y){
  return x+y
}

注意:1. typescript中的”=>“在函数类型声明时表示函数类型,描述其参数类型和返回类型

  1. JavaScript中的”=>“是一种定义函数的语法,是具体的函数体现

声明数组类型

let arr1: string[]
let arr2: Array<string>
arr1 = ['a','b','c']
arr2 = ['hello','world']

tuple

元组是一种特殊的数组类型,可以存储固定数量的元素,并且每个元素的类型是已知的且可以不同。元组用于精确描述一组值的类型,?表示可选元素

//第一个元素是string类型,第二个元素是number类型
let arr1:[string,number]
//第一个元素是number类型,第二个元素是可选的,如果存在,必须是Boolean类型
let arr2:[number,boolean?]
//第一个元素必须是number类型,后面的元素可以是任意数量的string类型
let arr3:[number,...string[]]

enum

  1. 数据枚举

    是最常见的枚举类型,其成员的值会自动递增,且数字枚举还具备反向映射的特点,在下面代码的打印中,可以通过值来获取对应的枚举成员名称

    enum Direction{
      up,
      down,
      left,
      right
    }
    console.log(Direction) //打印Direction会看到如下内容
    /*
    {
    	0:'up',
    	1:'down',
    	2:'left',
    	3:'right'
    }
    */
    //反向映射
    cosole.log(Direction.up)  //0
    cosole.log(Direction[0])  //up
    //此行代码报错,枚举中的属性是只读的
    Direction.up = 'shang'
    
    function walk(n: Direction){
      if(n === Direction.up)	console.log("向上走")
      else if(n === Direction.down)	console.log("向下走")
      else if(n === Direction.left)	console.log("向左走")
      else if(n === Direction.right)	console.log("向右走")
    }
    walk(Direction.up)
    walk(Direction.down)
    walk(Direction.left)
    walk(Direction.right)
    
  2. 常量枚举

    是一种特殊枚举类型,使用const关键词定义,在编译时会被内联,避免生成一些额外的代码。即使用常量枚举的typescript代码编译后生成的JavaScript代码量较小。

    const enum Direction{
      up,
      down,
      left,
      right
    }
    

type

可以为任意类型创建别名,让代码更简洁、可读性更强

  1. 基本用法

    type num = number; //num是类型别名
    let price: num
    price = 100
    
  2. 联合类型(一种高级类型,表示一个值可以是几种不同类型之一)

    type status = number|string
    type gender = '男'|'女'
    function printStatus(data:status):void{
        console.log(data);
    }
    function printGender(data:gender):void{
        console.log(data);
    }
    printStatus(404)
    printStatus('404')
    printGender('女')
    
  3. 交叉类型(允许将多个类型合并为一个类型,合并后的类型将拥有所有被合并类型的成员。交叉类型通常用于对象类型)

    type area = {
        height:number
        width:number
    }
    type address = {
        num:number
        cell: number
    }
    type House = area & address
    const house:House = {
        height: 100,
        width:100,
        num:3,
        cell:78
    }
    

interface和type的区别

相同点:interface和type都可以用于定义对象结构,两者在许多场景中是可以互换的

不同点:interface更专注于定义对象和类的结构,支持继承、合并;type可以定义类型别名、联合类型、交叉类型,但不支持集成和自动合并

interface和抽象类的区别

相同点:都用于定义一个类的格式

不同点:interface只能描述结构,不能有任何实现代码,一个类可以实现多个接口;抽象类:既可以包含抽象方法,也可以包含具体方法,一个类只能继承一个抽象类

泛型

泛型允许我们在定义函数、类或接口时,使用类型参数来表示未指定的类型,这些参数在具体使用时,才被指定具体的类型

function logData<T>(data:T):T{
    console.log(data)
    return data
}
logData<number>(100)
logData<string>('hello')

泛型可以有多个

function logData<T,U>(data1:T,data2:U):T | U{
    return Date.now() % 2 ? data1:data2
}
logData<number,boolean>(100,true)
logData<string,number>('hello',666)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2185206.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Conditional Generative Adversarial Nets

条件生成对抗网络 1.生成对抗网络 生成对网络由两个“对抗性”模型组成&#xff1a;一个生成模型 G&#xff0c;用于捕获数据分布&#xff0c;另一个判别模型 D&#xff0c;用于估计样本来自训练数据而不是 G 的概率。G 和 D 都可以是非线性映射函数。 为了学习数据 x 上的生…

设计模式-生成器模式/建造者模式Builder

构建起模式&#xff1a;将一个复杂类的表示与其构造分离&#xff0c;使得相同的构建过程能够得出不同的表示。&#xff08;建造者其实和工厂模式差不多&#xff09; 详细的UML类图 图文说明&#xff1a;距离相同的构建过程 得出不同的展示。此时就用两个类&#xff08;文本生成…

探索未来:hbmqtt,Python中的AI驱动MQTT

文章目录 **探索未来&#xff1a;hbmqtt&#xff0c;Python中的AI驱动MQTT**1. 背景介绍2. hbmqtt是什么&#xff1f;3. 安装hbmqtt4. 简单的库函数使用方法4.1 连接到MQTT服务器4.2 发布消息4.3 订阅主题4.4 接收消息4.5 断开连接 5. 应用场景示例5.1 智能家居控制5.2 环境监测…

WebGIS之Cesium三维软件开发

目录 第 1 章 三维 WebGIS 概述 1.1 Google Earth 1 1.2 SkylineGlobe 2 1.3 LocaSpace Viewe 2 1.4 Cesium 3 1.5 Cesium API 概要 4 第 2 章 Cesium 快速入门 2.1 Cesium 环境搭建 7 2.1.1 安装 Node.js 环境 7 2.1.2 配置 Cesium 依赖 8 2.2 搭建第一个 Cesi…

【2006.07】UMLS工具——MetaMap原理深度解析

文献&#xff1a;《MetaMap: Mapping Text to the UMLS Metathesaurus》2006 年 7 月 14 日 https://lhncbc.nlm.nih.gov/ii/information/Papers/metamap06.pdf MetaMap&#xff1a;将文本映射到 UMLS 元数据库 总结 解决的问题 自动概念映射问题&#xff1a;解决如何将文本…

Vue3丨进一步了解这 20 个响应式 API,写码如有神

前面说的话 在 Vue2 中&#xff0c;个人觉得对于数据的操作比较 “黑盒” 。而 Vue3 把响应式系统更显式地暴露出来&#xff0c;使得我们对数据的操作有了更多的灵活性。所以&#xff0c;对于 Vue3 的几个响应式的 API &#xff0c;我们需要更加的理解掌握&#xff0c;才能在实…

【MySQL】子查询、合并查询、表的连接

目录 一、子查询 1、单行子查询 显示SMITH同一部门的员工信息 2、多行子查询 in关键字 查询和10号部门的工作岗位相同的雇员的名字、岗位、工资、部门号&#xff0c;但是筛选出的雇员的部门不能有10号部门 all关键字 查询工资比30号部门中所有雇员工资高的雇员的姓名、…

TS(type,属性修饰符,抽象类,interface)一次性全部总结

目录 1.type 1.基本用法 2.联合类型 3.交叉类型 2.属性修饰符 1.public 属性修饰符 属性的简写形式 2.proteced 属性修饰符 3.private 属性修饰符 4.readonly 属性修饰符 3.抽象类 4.interface 1.定义类结构 2.定义对象结构 3.定义函数结构 4.接口之间的继…

postgresql|数据库|postgis编译完成后的插件迁移应该如何做(postgis插件最终章)

一、 本文的写作理由 postgis插件一般是编译安装&#xff0c;编译安装的原因是可以选择自己喜欢的版本&#xff0c;但编译的难度也是比较高的&#xff0c;因为有各种依赖&#xff0c;依赖之间还有依赖&#xff0c;非常容易形成依赖循环&#xff0c;因此&#xff0c;失败率是比…

【Python】CSVKit:强大的命令行CSV工具套件

CSVKit 是一个基于命令行的工具集&#xff0c;用于简化 CSV 文件的处理和管理。它提供了从数据转换、筛选、格式化到分析的全方位支持&#xff0c;特别适合需要处理复杂表格数据的用户。相比传统的 Excel 操作&#xff0c;CSVKit 更高效且功能更强大&#xff0c;非常适合数据分…

VSOMEIP代码阅读整理(1) - 网卡状态监听

一. 概述 在routing进程所使用的配置文件中&#xff0c;存在如下配置项目&#xff1a;{"unicast" : "192.168.56.101",..."service-discovery" :{"enable" : "true","multicast" : "224.244.224.245",…

线程和进程的关系和区别

目录 进程 概念 特点 生命周期 进程的通信 应用场景 线程 概念 特点 类型 状态 调度 应用场景 线程和进程的关系与区别 关系 区别 总结 僵尸进程 产生原因 解决方法 进程 概念 第一&#xff0c;进程是一个实体。每一个进程都有它自己的地址空间&#xff…

数字通信中不同信道类型对通信系统性能影响matlab仿真分析,对比AWGN,BEC,BSC以及多径信道

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 &#xff08;完整版代码包含详细中文注释和操作步骤视频&#xff09…

C0013.Clion中利用C++调用opencv打开摄像头

下载opencv https://opencv.org/get-started/ 直接官网下载opencv-4.9.0-windows.exe 安装opencv opencv配置环境变量 如上安装配置完成。

SpringBoot框架下的健康信息管理解决方案

第1章 绪论 1.1背景及意义 随着社会的快速发展&#xff0c;计算机的影响是全面且深入的。人们生活水平的不断提高&#xff0c;日常生活中人们对医院管理方面的要求也在不断提高&#xff0c;由于老龄化人数更是不断增加&#xff0c;使得师生健康信息管理系统的开发成为必需而且紧…

第三批安全可靠评测名单公布,几家欢喜几家忧

9月30号&#xff0c;赶在国庆长假之前&#xff0c;中国信息安全评测中心发布了《安全可靠评测结果公告(2024年第2号)》&#xff0c;测试结果自发布之日起有效期三年。 本期测试分为集中式数据库、分布式数据库和中央处理器三个大类&#xff0c;结果共有14家公司的16个产品入围&…

AI绘画实现数字人2D形象生成及3D数字人视频生成

概述 随着人工智能技术的不断进步&#xff0c;AI绘画已经成为数字艺术创作领域的重要工具。本章将详细介绍如何利用AI绘画技术生成数字人的2D形象&#xff0c;并进一步将其转化为3D数字人视频。通过一系列实践步骤和Python代码示例&#xff0c;您将能够掌握从平台使用到系统部…

计算机毕业设计之:音乐媒体播放及周边产品运营平台(源码+文档+讲解)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

看Threejs好玩示例,学习创新与技术(Noise)

给图像加一点噪声效果&#xff0c;可以起到朦胧背景的效果&#xff0c;比如下面这幅画。 除了普通的图片外&#xff0c;我们可以把这个效果应用到地图或其他方面&#xff0c;比如超过范围不允许用户了解更详细的内容。当然&#xff0c;也可以采用雾Fog效果&#xff0c;但后处理…

鸿蒙ArkUI实战开发-主打自研语言及框架

ArkUI 是 HarmonyOS 的声明式 UI 开发框架&#xff0c;而 ArkUI-X 是基于 ArkUI 框架扩展而来的跨平台开发框架。ArkUI-X 支持 HarmonyOS、OpenHarmony、Android 和 iOS 平台&#xff0c;允许开发者使用一套代码构建支持多平台的应用程序。 一、ArkUI-X 的实战开发步骤 在实战开…