3.6 never类型
never类型表示的是哪些永不存在的值的类型 , 此类型多用于ts的底层实现中使用 , 在应用层级中 , 一般用不到 。
在底层中的用法类似这样:type EType = xxyy ?: never
// 类型保护 typeof得到类型instanceof是不是它的实例function print(name: string) {if (typeof name === 'string') {console.log(name.length, '字符串')} else {// ts中 , 此句 , 写和不写没有区别 , 不会执行到这里never在底层 , 表示console.log(name)}}// 这样写在ts编译时会报错 , 不通过// print(123)
never类型是类型的子类型:
// never类型它是unknown类型的子类型// extends在ts中理解为 , never定义的属性或方法在 unknown全部都要有 , 则为真// extends判断一个类型是否是别的类型的子类型type NeverType = never extends unknown ? string : booleanlet a: NeverTypea = '1'
3.7 字面量类型
声明一个变量 , 变量的值 , 它只能在规定的几个值范围中去选择其中之一来赋值 。
// 类型定义在变量的后面用冒号 , 然后紧跟定义的类型// 字面量类型无法进行类型模块化 , 如果想要进行模块化 , 可以使用枚举类型let arg: 'aa' | 1 | truearg = 1
【ts概述、ts环境准备和编译、ts类型声明】3.8 枚举类型
指定的范围中去选择值 。定义一个枚举类型 , 可以指定的元素的值 , 也可以不指定 , 如果不指定 , 默认值为数字 , 值从0开始 , 累加下去 。
枚举类型可以通过进行模块化导出 。
定义一个枚举类型 , 不指定元素的值:
// 可以把枚举 , 定义为数组enum Color {// 0red,// 1green,// 2blue,// 3pink,// 4yellow}// 如果指定的一个变量它的类型为枚举类型 , 则在赋值时 , 最好是使用 枚举类型.元素 进行赋值let c: Colorc = Color.greenconsole.log(c); // 1// 类型转换出来的都为数字 , 所以在给变量赋值为数字时 , 不会报错 , 类型对的 , 可以成功运行c = 10console.log(c); // 10
定义一个枚举类型 , 指定元素的值:
enum Color {red = 'red',green = 'green'}let c: Colorc = Color.greenconsole.log(c) // green
定义一个枚举类型 , 一部分指定值 , 一部分不指定值:
// 如果你指定值 , 它的类型为数字 , 则下面的元素会从上一个元素的数字+1开始 , 下一个元素无需手动指定// 如果你赋值是非数字 , 则下一个元素需要手动给值 , 直到遇到上一个元素值为数字为止enum Color {// 0red,// greengreen = 'green',// 10blue = 10,// 11pink,// 12yellow}let c: Colorc = Color.pinkconsole.log(c) // 11
枚举类型小案例:
// reduxactionenum ActionEnumType {addNum = 'addNum',decrNum = 'decrNum'}const reducer = (state = { num: 1 }, action: { type: ActionEnumType; payload: any }) => {return state}// 使用了枚举类型 , 把原来的type给限定义范围 , 只能在规定的规范中去使用值reducer({ num: 100 }, { type: ActionEnumType.addNum, payload: [] })
- 阿里山旅游攻略,阿里山旅游攻略一日游
- 罗布泊究竟有多危险?中国四大无人区之一、充满神秘的地球之耳 度中国之最
- 阳光假日
- 中科水景设计、建造的迪拜海上文旅夜游项目,创吉尼斯世界纪录 夜游吉尼斯记录
- 马蹄蟹
- 胡杨、沙漠、碧水、蓝天……这个县全年旅游收入有望过亿元 策勒吉尼斯记录
- 风景区规划
- 老梁:真实的罗斯柴尔德家族,并不像传说中那么神秘、有钱 老梁解读历史之最
- 黄花岗72烈士
- 2、第一个Mybatis程序