值类型
TS 官方推荐使用 string , 不推荐用 String , 因为 String 是包装对象,Number,Boolean 等同理。
String 既能赋值基础字符串,也能赋值包装对象。
数组 []
对象 {}
对象类型的描述,可以用 ,
;
或换行分隔,如
Object 、object 和 {} 的区别
Object
(首字母大写)【用得很少,因类型太宽泛】 和{}
的类型声明最抽象,对象、数组、基础数据类型(除 null , undefined)都能赋值。object
(首字母小写)【用得很少,因类型太宽泛】更具体些,类似于{ [key: string]: any }
,可以给它赋值对象和数组,不能分配基础数据类型{ [key: string]: string }
则最具体,只能赋值键值为字符串的对象。
索引签名
允许定义对象可以具有任意数量的属性,这些属性的键和类型是可变的,常用于描述类型不确定的属性(具有动态属性的对象)。
函数 function
类 class
任意类型 any
当不确定变量的类型时(比如来自用户输入或第三方代码库的动态内容),可以使用,但尽量少用。
- 任何类型的值都可以赋值给 any 类型的变量
- 未声明类型的变量,其类型就是 any
- any 类型的变量,可以赋值给任意类型的变量
- 读取 any 类型数据的任何属性都不会报错
不确定的类型 unknown
- 任何类型的值都可以赋值给 unknown 类型的变量
- unknown 可以理解为类型安全的 any ,即 unknown 类型的变量,无法像 any 类型的变量一样,随意赋值给其他类型的变量。
- any 与 unknown 的区别 : unknown 需要明确类型后执行操作,any 则不需要
永不存在的类型 never
用于总会抛出异常或根本不会有返回值的函数表达式的返回值类型。
当变量被永不为真的类型保护所约束时,该变量也是 never 类型。
很少主动声明类型 never,通常是 TS 自行推导出类型 never
用途:
- 限制函数的返回类型(顺利执行的函数默认会返回 undefined,所以 never 仅适用于运行过程中会抛出异常,或永远调不完的函数)
- 控制流程
- 类型运算
空类型 void
通常用于描述函数没有返回值
或
或
void
类型的变量只能被赋予undefined
但 void 与 undefined 并不等效!
undefined 则不会报错
这是 TS 官方的一种特殊处理
元组 Tuple
固定长度和类型(可以不同)的数组
枚举 enum【重要】
一组常量值,不能修改,可提升语义,方便维护。
- 枚举类型的名称通常首字母大写!
数值枚举(默认)
- 枚举成员的值会默认递增
- 具有反向映射
打印可见
可以自定义下标的起点
也可以自定义任意下标,未定义的在上一个的基础上递增
甚至下标可以相同
如果下标使用了计算值或常量,那么该字段后面紧接着的字段必须设置初始值,不能默认递增值了!
字符串枚举
即给枚举成员赋值为字符串
- 当枚举成员为字符串时,其之后的成员也必须是字符串。
- 没有反向映射
常量枚举
给枚举添加 const
标注,可减少编译的代码量。
编译为 js 后为
而
编译为 js 后为
可见编译后的代码量,大大减少了!
事件 Event
如鼠标事件 MouseEvent
HTML元素 HTMLElement
如 input 元素 HTMLInputElement
字面量类型(了解即可)
则 myname 只能赋值 “朝阳” ,无法赋值其他值。