typescript笔记-day3
Top Type
any
- 会跳过类型检查器对值的检查,任何值都可以赋值给
any
类型,any
类型的值也可以赋值给任何类型 - 可以给一个any类型的变量赋值任何的值,比如数字、字符串的值;
const arr: any[] = ["111", 234] //不推荐
- 会跳过类型检查器对值的检查,任何值都可以赋值给
unknown
:- 它用于描述类型不确定的变量
- 任何类型的值都可以赋值给unknown类型,但unknow类型只能赋值给any和unknown类型
- any类型可以赋值给任意类型
let notSure: unknown = 4; |
Bottom Type
never
- 是整个类型系统层级中最底层的类型。
- 和 null、undefined 一样,它是所有类型的子类型,但只有 never 类型的变量能够赋值给另一个 never 类型变量。
- 表示那些永不存在的值的类型
- 函数中是一个死循环或者抛出一个异常
function justThrow(): never { |
类型断言:警告编译器不准报错
- 通常这会发生在你清楚地知道一个实体具有比它现有类型更确切的类型。
- 在 TypeScript 类型分析不正确或不符合预期时,将其断言为此处的正确类型
- 类型断言好比其它语言里的类型转换
- 两种方式实现
//在 TypeScript 看来,greaterThan2 的类型既可能是数字,也可能是 undefined,所以上面的示例中提示了一个 ts(2322) 错误,此时我们不能把类型 undefined 分配给类型 number |
非空断言!
- 排除
null
及undefined
function printMessageLength(message?: string) { |
- 确定赋值断言
let x!: number;
确定赋值断言,TypeScript 编译器就会知道该属性会被明确地赋值。
let x!: number; |
双重断言
- 如果在使用类型断言时,原类型与断言类型之间差异过大,也就是指鹿为马太过离谱,离谱到了指鹿为霸王龙的程度,TypeScript 会给你一个类型报错:
const str: string = "Kylin"; |
类型层级
- 最顶级的类型,
any
与unknown
- 特殊的
Object
,它也包含了所有的类型,但和 Top Type 比还是差了一层 String
、Boolean
、Number
这些装箱类型- 原始类型与对象类型
- 字面量类型,即更精确的原始类型与对象类型嘛,需要注意的是
null
和undefined
并不是字面量类型的子类型 - 最底层的
never
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 晚风予星!
评论