Appearance
03 boolean 与类型字面量
number,boolean,string,symbol,bigint这些 js 本身就支持的基础类型使用起来很简单,ts 的书写几乎感觉不到和 js 的差别,而且支持很多种书写的方式,当然中间还隐藏着一些很重要的细节。拿 boolean 举例来说:
javascript
let a = true;
var b = false;
const c = true;
let d: boolean = true;
let e: true = true;
let f: false = false;
//let g: true = false; // error 不能将类型false分配给类型true- 可以让 TS 推导出值的类型为 boolean(a,b)
- 可以明确的告诉 TS,值的类型为 boolean(d)
- 可以明确的告诉 TS,值为某个具体的 boolean 值(e,f 和 g)
- 可以让 TS 推导出(const)值为某个具体的布尔值(c)
首先我们常见的写法是 1-4(行),要么使用 TS 自己的类型推导,要么我们自己定义好 boolean 类型,这是我们开始就介绍的方式。但是,5-7(行)的写法是什么意思?
其实写法也很直观,我们大概也能猜到,变量 e 和 f 不是普通的 boolean 类型,而是值只为 true 和 false 的 boolean 类型
把类型设为某个值,就限制了 e 和 f 在所有布尔值中只能取指定的那个值。这个特性称为类型字面量。
类型字面量:仅仅表示一个值的类型
由于类型字面已经限定了具体的类型 true 或者 false,因此上面代码第 7 行的错误就可以理解了:
javascript
let g: true = false; // error 不能将类型false分配给类型true特别注意一下第三行的代码:const c = true;,这里的变量 c 的类型是类型字面量 true。
因为 const 声明的基本类型的值,赋值之后便无法修改,因此 TS 推导出的是范围最窄的类型
