TypeScript学习笔记(一)any unknown never!!
tags: TypeScript
@clownly
any、unknown与never
any
any类型可以用来表示任何类型,但是它会让typescript失去类型检查的作用,所以尽量避免使用any类型。
- 如果是类型不兼容报错导致使用any,可以使用类型断言来解决;
- 如果是类型太复杂导致不想全部声明而使用any,使用类型断言为需要的最简类型;
- 如果想表达未知类型,使用unknown类型。
unknown
unknown类型与any类型类似,它可以被赋值给任何类型,但是它不能被赋值给任何类型,也不能进行属性访问,除非使用类型断言。
never
主动使用never的两种情况
-
函数返回值类型为never,函数会抛出错误,或者进入死循环
function fn(): never { throw new Error("error"); } -
类型收窄
function fn(x: string | number) { if (typeof x === "string") { x.charAt(0); } else if (typeof x === "number") { x.toFixed(2); } else { const check: never = x; throw new Error(`unknown type: ${check}`) } }
类型断言
类型断言的正确使用方式,在TypeScript类型分析不正确或不符合预期时,将其断言为此处的正确类型。基本语法是as NewType,也可以使用<NewType>。
非空断言
!非空断言,用于确定某个值不为null或undefined。
const el = document.getElementById("app")!;
这里引入一个类型层级的概念, 其中
any/unknown是Top Type,never是Bottom Type。