typescript
变量的声明
声明方式
-
声明了类型后TypeScript就会进行类型检测,声明的类型可以称之为类型注解
-
变量的定义格式
- var/let/const 标识符: 数据类型 = 赋值;
类型介绍
-
javascript类型
-
number类型
-
boolean类型
-
Array类型
-
1.类型[ ]
-
2 规则 Array<类型>
-
规则
- // 在数组中存放不同的类型是不好的习惯
- // 不好的习惯: 一个数组中在TypeScript开发中, 最好存放的数据类型是固定的(string)
- // 类型注解: type annotation
const names1: Array = [] // 不推荐(react jsx中是有冲突 )
const names2: string[] = [] // 推荐
-
-
Object类型
-
object
-
对象字面量{}
- 无法对其增加属性(少用)
-
-
string类型
-
Symbol类型
-
null和undefined类型
-
-
type
- 定义类型别名
-
可选链的使用
- ?.
- 当对象的属性不存在时,会短路,直接返回undefined,如果存在,那么才会继续执行
-
可选类型
- 一个参数一个可选类型的时候, 它其实类似于是这个参数是 类型|undefined 的联合类型
-
联合类型
- 能使用尽量使用
-
Any 类型 和 unknown 顶级类型
-
unknown类型
- //这样写会报错unknow类型不能作为子类型只能作为父类型 any可以作为父类型和子类型
//unknown类型不能赋值给其他类型
- //这样写会报错unknow类型不能作为子类型只能作为父类型 any可以作为父类型和子类型
-
//unknown可赋值对象只有unknown 和 any
- 如果是unknown 是不能调用属性和方法
- //unknown类型不能赋值给其他类型
- any类型
- 在某些情况下,我们确实无法确定一个变量的类型,并且可能它会发生一些变化,这个时候我们可以使用any类型(类似
于Dart语言中的dynamic类型)。
- 声明变量的时候没有指定任意类型默认为any
-
void类型
- JavaScript 没有空值(Void)的概念,在 TypeScript 中,可以用 void 表示没有任何返回值的函数
- void也可以定义undefined 和 null类型
-
Null和undefined类型
- 与 void 的区别是,undefined 和 null 是所有类型的子类型
-
never类型
- 使用 never 类型来表示不应该存在的状态(很抽象是不是)
- 用于场景兜底逻辑
-
tuple类型
- tuple是元组类型
- 固定数量的不同类型的元素的组合
- 对于越界的元素他的类型被限制为 联合类型(就是你在元组中定义的类型)
-
布尔类型
- 注意,使用构造函数 Boolean 创造的对象不是布尔值
- 事实上 new Boolean() 返回的是一个 Boolean 对象
-
符号
-
??操作符
- 空值合并操作符(??)是一个逻辑操作符,当操作符的左侧是 null 或者 undefined 时,返回其右侧操作数,
否则返回左侧操作数;
- 空值合并操作符(??)是一个逻辑操作符,当操作符的左侧是 null 或者 undefined 时,返回其右侧操作数,
-
?
- 可选类型
-
!!操作符
- p将一个其他类型转换成boolean类型;
p类似于Boolean(变量)的方式;
- p将一个其他类型转换成boolean类型;
-
!
-
非空类型断言
- 非空断言使用的是 ! ,表示可以确定某个标识符是有值的,跳过ts在编译阶段对它的检测
-
-
-
readonly
- 只读属性是不允许被赋值的只能读取
-
对象的类型
- 在typescript中,我们定义对象的方式要用关键字interface(接口),我的理解是使用interface来定义一种约束,让数据的结构满足约束的格式。
- type
- 两者区别
-
函数类型
- 函数拓展
- 函数的默认值
- 函数重载
-
交叉类型
- 多种类型的集合,联合对象将具有所联合类型的所有成员
-
类型断言
-
语法: 值 as 类型 或 <类型>值 value as string value
-
类型断言只能够「欺骗」TypeScript 编译器,无法避免运行时的错误,反而滥用类型断言可能会导致运行时错误
-
as const
- 是对字面值的断言,与const直接定义常量是有区别的
-
如果是普通类型跟直接const 声明是一样的
-
类型别名
- 顾名思义
-
使用枚举 通过enum关键字定义我们的枚举
-
const枚举
- let 和 var 都是不允许的声明只能使用const
-
反向映射
-
-
类型推论
- 如果你声明变量没有定义类型也没有赋值这时候TS会推断成any类型可以进行任何操作
-
类型缩小
- 在给定的执行路径中,我们可以缩小比声明时更小的类型,这个过程称之为 缩小
- 常见的类型保护有如下几种:
ptypeof
p平等缩小(比如===、!==)
pinstanceof
pin
p等等…
函数也是种类型
接口(*)
两种声明对象中的其中一种
interface 加 I
interface和type区别
- interface 可以重复的对某个接口来定义属性和方法;
p而type定义的是别名,别名是不能重复的
类
类的定义
- getters/setters
多态
- 多态的目的是为了写出更加具备通用性的代码
继承
抽象类
- 抽象类无法被实例化
- 我们定义的抽象方法必须在派生类实现
类的成员修饰符
- ppublic 修饰的是在任何地方可见、公有的属性或方法,默认编写的属性就是public的;
pprivate 修饰的是仅在同一类中可见、私有的属性或方法;
pprotected 修饰的是仅在类自身及子类中可见、受保护的属性或方法;
静态 成员
- static
- 随着类的调用而调用
为什么使用ts? js与ts对比?
TypeScript函数类型
可推导的this类型
- 我在公众号也有一篇文章专门讲解this:https://mp.weixin.qq.com/s/hYm0JgBI25grNG_2sCRlTA;
内置对象
背景
TypeScript可以编译出纯净、 简洁的JavaScript代码
搭建ts启动环境
-
1使用ts-node
- n 方式二:安装ts-node
n 另外ts-node需要依赖 tslib 和 @types/node 两个包:
n 现在,我们可以直接通过 ts-node 来运行TypeScript的代码:
使用ts-node
npm install ts-node -g
npm install tslib @types/node -g
ts-node math.ts
- n 方式二:安装ts-node
-
2使用webpack
泛型
常用名称
- T:Type的缩写,类型
pK、V:key和value的缩写,键值对
pE:Element的缩写,元素
pO:Object的缩写,对象
泛型接口
泛型类
泛型约束
模块化开发
命名空间namespace
declare文件
declare命名空间
XMind: ZEN - Trial Version