ts概述、ts环境准备和编译、ts类型声明( 二 )


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: [] })