当前位置: 首页 > article >正文

TS 基础

这里写目录标题

  • 基础
    • 简介
    • 环境搭建
    • 为何需要TS
    • 编译TS
      • 1.命令行编译
      • 2.自动化编译
    • 类型声明
    • 类型判断
    • 类型总览
    • 常用类型
      • any
      • unknown
      • never (几乎不用)
      • void
      • Object(少用)
      • 声明对象类型
      • 声明数组类型
      • tuple
      • enum(重要)
        • (1)数字枚举
        • (2)字符串枚举
        • (3)常量枚举
      • type
        • 基本用法
          • 联合类型(或)
          • 交叉类型(且)
      • 一个特殊的情况

基础

简介

1.以javascript 为基础构建的语言
2.一个js的超集
3.可以在任何支持js的平台中执行
4.Ts扩展了Js 并添加了类型

环境搭建

1.cmd 全局下载 npm i -g typescript
2.创建一个ts文件
3.使用tsc对ts文件进行编译
进入命令行
进入ts文件所在目录
执行命令:tsc xxx.ts

为何需要TS

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

编译TS

浏览器不能直接运行TS代码,需要编译成JS再交由浏览器解析器执行

1.命令行编译

在这里插入图片描述

2.自动化编译

在这里插入图片描述

类型声明

使用:对变量或函数形参,进行类型声明
在这里插入图片描述
在:后也可以写字面量类型 不过实际开发中用的不多

在这里插入图片描述

类型判断

TS会根据我们的代码,进行类型的推到,例如下面代码中的变量d,只能存储数字

let d = -99 //TypeScript会推断出变量d的类型是数字
d = false //警告:不能将类型“boolean”分配给类型“number”

但要注意 类型推断不是万能的,面对复杂类型时推断容易出问题,所以尽量还是明确的编写类型声明!

类型总览

js中的数据类型
在这里插入图片描述
TS的数据类型
在这里插入图片描述
注意点!

在 JavaScript 中的这些内置构造函数: Number 、 String 、 Boolean ,⽤于 创建对应的包装对象,
在⽇常开发时很少使⽤,在 TypeScript 中也是同理,所以 在 TypeScript 中进行类型声明时,通常都是用小写的
number 、 string 、 boolean

例如下面代码

let str1: string
str1 = 'hello'
str1 = new String('hello') //报错
let str2: String
str2 = 'hello'
str2 = new String('hello')
console.log(typeof str1) //string
console.log(typeof str2) //Object

原始类型VS包装对象

原始类型:如 number 、 string 、 boolean ,在 JavaScript 中是简单数据类型,它们在内存中占⽤空间少,处理速度快。
包装对象:如 Number 对象、 String 对象、 Boolean 对象,是复杂类型,在内存中占⽤更多空间,在⽇常开发时很少由开发⼈员⾃⼰创建包装对象
2. ⾃动装箱:JavaScript 在必要时会⾃动将原始类型包装成对象,以便调⽤⽅法或访 问属性 例如 字符串身上没有.length属性 但是 str.length的时候可以读取到值
在这里插入图片描述

常用类型

any

any的含义是:任意类型 一旦将变量类型限制为any,则意味着放弃了对该变量的类型检查
在这里插入图片描述
注意:any类型的变量,可以复制给任意类型的变量 且该变量的类型会随着any类型的变量改变
在这里插入图片描述
console.log(typeof x); //number

unknown

unknown 的含义是:未知类型,适⽤于:起初不确定数据的具体类型,要后期才能确定
unknown 可以理解为⼀个类型安全的 any 。
在这里插入图片描述
unknown 会强制开发者在使⽤之前进⾏类型检查,从⽽提供更强的类型安全性。
在这里插入图片描述
读取 any 类型数据的任何属性都不会报错,而 unknown 正好与之相反

在这里插入图片描述

never (几乎不用)

never的含义是:任何值都不是,即:不能有值,例如 undefined 、 null 、‘’、 0 都不行!
1.几乎不用never去直接限制变量,因为没有意义 例如:
在这里插入图片描述
2.never一般是TypeScript主动推断出来的,例如:
在这里插入图片描述
3.never也可用于限制函数的返回值
在这里插入图片描述

void

void含义是空 即:函数不返回任何值 调用者也不应依赖其返回值进行任何操作
1.void通常用于函数返回值声明
在这里插入图片描述
在这里插入图片描述
2.以下写法均符合规范
在这里插入图片描述
3.限制函数返回值时 是不是undefined 和void 就没区别呢?
----有区别 因为还有这句话 【返回值类型为void 的函数 调用者不应依赖其返回值进行任何操作】
在这里插入图片描述
理解 声明void 后 在TS层面是不希望通过返回值来进行一系列操作 所以报错
在这里插入图片描述

理解:void & undefined
void 是一个广泛的概念 用来表达“空” 而undefined则是这种“空”的具体实现
因此可以说undefined 是void能接受的一种 “空” 的状态
也可以理解为 void 包含 undefined 但void所表达的语义超越了undefined void是一种意图上的约定 而不仅仅是特定值的限制
总结:
如果一个函数的返回类型是void 那么:
从语法上讲:函数可以返回undefined 至于显式返回 还是 隐式返回 这无所谓
从语义上讲 函数调用者不应关心函数返回的值 也不应依赖返回值进行任何操作! 即使我们知道了它返回了undefined

Object(少用)

关于 Object 和 object 实际开发中用的相对较少 因为范围太大了

object(小写)
object (⼩写)的含义是:所有⾮原始类型,可存储:对象、函数、数组等,由于限制
的范围⽐较宽泛,在实际开发中使⽤的相对较少。

在这里插入图片描述
Object(⼤写)
官⽅描述:所有可以调用 Object 方法的类型(如toString)。
简单记忆:除了 undefined 和 null 的任何值。
由于限制的范围实在太大了!所以实际开发中使⽤频率极低。
在这里插入图片描述

声明对象类型

1.实际开发中:限制一般对象 通常用以下形式
在这里插入图片描述
2.索引签名:允许定义对象可以具有任意数量的属性 , 这些属性的键和类型是可变的,
常用于:描述类型不确定的属性(具有动态属性的对象)

含义:除了这两个以外 可以有任何一个key,只要key是字符串就可以 且key所对应的值可以是任何的值
在这里插入图片描述
声明函数类型
在这里插入图片描述
在这里插入图片描述

声明数组类型

在这里插入图片描述
在这里插入图片描述

tuple

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

enum(重要)

枚举(enum)可以定义一组命名常量 它能增强代码的可读性 也让代码更好维护

如下代码的功能是:根据调⽤ walk 时传⼊的不同参数,执行不同的逻辑,存在的问题是调用 w
alk 时传参时没有任何提示,编码者很容易写错字符串内容;并且用于判断逻辑的 up 、 dow
n 、 left 、 right 是连续且相关的⼀组值,那此时就特别适合使用 枚举( enum )

(1)数字枚举

数字枚举⼀种最常⻅的枚举类型,其成员的值会⾃动递增,且数字枚举还具备反向映射的
特点,在下⾯代码的打印中,不难发现:可以通过值来获取对应的枚举成员名称 。
在这里插入图片描述
也可以指定枚举成员的初始值 其后的成员值会自动递增
在这里插入图片描述
使⽤数字枚举完成刚才 walk 函数中的逻辑,此时我们发现: 代码更加直观易读,⽽且类
型安全,同时也更易于维护
在这里插入图片描述

(2)字符串枚举

注意:字符串枚举没有反向映射
枚举成员的值是字符串
在这里插入图片描述

(3)常量枚举

官方描述:常量枚举是一种特殊的枚举类型 它使用const关键字定义 在编译时会内联 避免产生一些额外的代码

何为编译时内联? (了解) 所谓“内联”其实就是 TypeScript 在编译时,会将枚举成员引⽤替换为它们的实际值,
⽽不是⽣成额外的枚举对象。这可以减少⽣成的 JavaScript 代码量,并提⾼运⾏时性能

type

type 可以为任意类型创建别名,让代码更简洁、可读性更强,同时能更方便地进行类型复用和 扩展

基本用法

类型别名使用 type 关键字定义, type 后跟类型名称,例如下面代码中 num 是类型别名。
在这里插入图片描述

联合类型(或)

联合类型是⼀种⾼级类型,它表示⼀个值可以是⼏种不同类型之⼀。
在这里插入图片描述

交叉类型(且)

在这里插入图片描述

一个特殊的情况

如下两段代码:
代码1(正常):
在函数定义时,限制函数返回值为void 那么函数的返回值必须是空
在这里插入图片描述
代码2(特殊)
使用 类型声明 限制函数返回值为 void 时, TypeScript 并不会严格要求函数返回空。
在这里插入图片描述
为什么?
是为了确保如下代码成立,我们知道 Array.prototype.push 的返回值是一个数字,
⽽ Array.prototype.forEach 方法法期望其回调的返回类型是 void (即不用return)。

箭头函数如果只有一句话 那么会默认这句话是返回值 (而push的返回值是number),如果做严格限制会出错
在这里插入图片描述
下方代码 虽然有返回值x 但是不能进行任何操作 因为声明的返回值是void
在这里插入图片描述
而map 和find需要返回值
在这里插入图片描述


http://www.kler.cn/a/369406.html

相关文章:

  • 深度剖析美区代理IP的多元应用与优势
  • 前端性能优化之SSR优化
  • 深度学习(一)基础:神经网络、训练过程与激活函数(1/10)
  • 持续深化信创布局,途普科技与统信软件完成产品兼容性互认证
  • JVM(HotSpot):GC之G1垃圾回收器
  • 【读书笔记·VLSI电路设计方法解密】问题28:什么是芯片可靠性
  • 【专用名词的离线语音识别在2024年底的解决方法调查-会议签到的补充】
  • 编译,链接。
  • 大数据之实时数据同步方案
  • 香橙派Orangepi 5pro 配置Hailo-8/Hailo-8L
  • 自建html首页
  • 分享electron多窗口实践
  • 使用 NLP 和模式匹配检测、评估和编辑日志中的个人身份信息 - 第 2 部分
  • WPF入门_06资源和样式
  • 在Guided模式下给无人机发送命令设置位置速度
  • 1553B总线电缆网络测试及数据分析设备
  • Linux iptables基本使用
  • RHCE 第二次作业
  • Aloudata BIG 主动元数据平台支持 Oracle/DB2 存储过程算子级血缘解析
  • Django 获取用户IP
  • #Swift The difference between Parameter and Agrument
  • 第十八届联合国世界旅游组织/亚太旅游协会旅游趋势与展望大会在广西桂林开幕
  • 智慧工地:建筑热潮退去后的挑战与应对策略
  • pandas习题 043:移动窗口中最大值对应的其他列值
  • 期刊论文写作之LATEX模板(持续更新……)
  • php反序列化漏洞典型例题