typescript 数据类型
- number
- boolean
- string
- object
- array
- 元组(tuple)
- null和undefined
- symbol
- any
- unknown
- never
- void
object
一般不会用object,object类型读不到值,且改不了值,所以没用
array
let arr:Array<string> = []
let arr1:string[] = []
元组tuple
let arr:[string,number]=['123',123]
null和undefined
他们既是类型,也是自身类型的值
let a:null = null
let b:undefined = undefined
any
any是用来定义无法确定变量的类型的类型,定义的变量可以进行任何操作
unknown
用来描述不确定的变量,与any有点类型,但是无法在类型无法确定时做任何操作
let a:unknown
// 需要对unknown类型数据进行类型保护才能进行操作
if(typeof a === 'string'){
console.log(a.length)
}
never
用来描述从不可能发生的类型
void
是用来描述没有返回值的函数返回值类型,void下的函数返回值类型也支持返回undefined
类型推断
我们在变量没有指定类型时,typescript会根据上下文给我们推断该变量的类型,所以我在定义变量时,可以给变量一个默认值,typescript就会根据初始值给我们推断出对应类型。
联合类型
联合类型是一种组合类型,表示必须是这多种类型的其中一种,每个类型我们称为联合成员
问题:
多种类型导致调用某一种联合成员的方法报错,需要进行类型保护,typescript会根据上下文确定该变量的类型
类型别名
接口interface
接口属性修饰符
类型别名和interface
type没有像interface一样具有继承性等,所以对象类型的数据一般使用interface来定义类型,非对象类型的数据用别名来定义。
interface可以重复定义接口而type不行
交叉类型
交叉类型也是一种组合类型,但是这种组合类型是交叉成员必须都满足
类型断言
非空类型断言
字面量类型
字面量推断
类型缩小
typeof
平等缩小
instanceof
in
函数类型
调用签名
构造签名
参数可选类型和默认参数和剩余参数
函数重载
This
指定this
this相关的内置工具
枚举
严格的字面量赋值检测
当变量的类型失去鲜活度时,typescript不会对该变量进行严格字面量赋值检测,否则执行严格字面量检测
typescript模块化
js规范没有export的js文件都应该是一个文件,而非模块。
如果你有一个js文件,没有import或export,可以用export{} 让js把这个文件没有导出任何内容的模块
内置类型导入
命名空间namespace(了解)
declare 声明模块
declare 声明文件
declare 命名空间
类型查找
tsconfig.json文件
typescript类
类
抽象类
索引签名
接口继承
接口实现
抽象类和接口的区别
泛型
泛型接口
泛型类
泛型约束