自从ES2015中引入了Symbol,ES2020引入了BigInt,在js中共包含了7种基本类型,分别是`String`,`Number`,`Boolean`,`undefind`,`null`,`Symbol`,`BigInt`。同时,这些基本类型在ts中也相应的包含了这些基本类型。
### **字符类型**
在ts中,使用`string`来表示字符类型
```javascript
const title: string = '这是typescript的字符串'
```
在es2015中引入了模板字符串,在ts中,字符类型也支持使用模板字符串
```javascript
const name: string = '子君'
const desc: string = `我的名字叫${name}`
```
当然拼接字符串也是可以的
```javascript
const firstName: string = '子君'
const lastName: string = '托洛夫斯基'
const name: string = firstName + '·' + lastName
```
### **数值类型**
在ts中,使用`number`来表示数值类型
```javascript
const age: number = 16
```
数值可以表示为二进制,八进制,十进制和十六进制
```javascript
// 二进制
const num1: number = 0b10101
// 八进制
const num2: number = 0o5023
// 十进制
const num3: number = 1234
// 十六进制
const num4: number = 0xA23D
```
在js中有两个特殊的值`NaN`和`Infinity`,它们在ts中也属于数值类型
```javascript
const num5: number = NaN
const num6: number = Infinity
```
### **布尔类型**
在ts中,使用`boolean`来表示布尔类型
```javascript
const isTrue: boolean = true
```
***注意***
ts中boolean类型只有两个值,`true`和`false`,在js中,除这两个值之外,其他Falsy值均不能表示为boolean类型(undefined与null比较特殊,见下一节)。
```javascript
// 报错 Type '0' is not assignable to type 'boolean'
const result: boolean = 0
```
Falsy值包括 false, undefined, null ,0, '', NaN, 0n
### **undefined** 和 **null**
在ts中,`undefined`和`null`即表示为值,也表示为类型,具体是值还是类型,取决于在语法中的位置
```javascript
// 前一个undefined为类型,后一个为值
const name: undefined = undefined
const sex: null = null
```
在ts中,`undefined`与`null`是任何其他类型的子集,这意味着所有其他类型的变量属性都可以被赋值为`undefined`,`null`
```javascript
let name: string = undefined
name = '张三'
let age: number = null
age = 10
```
在上一节说道布尔类型只能赋值`true`或者`false`,其实也可以赋值`undefined`,`null`
```javascript
let isTrue: boolean = undefined
isTrue = true
```
如果只想让`undefined`,`null`赋值给自己这种类型,可以在`tsconfig.json`开启`strictNullChecks`
```json
{
"compilerOptions": {
"strictNullChecks": true
}
}
```
### **Symbol**
`Symbol`是ES2015新增类型,它的功能类似于一种标识唯一性的ID。
```javascript
const symbol1: Symbol = Symbol()
// symbol 可以指定一个描述
const symbol2: Symbol = Symbol('key')
```
### **BigInt**
`BigInt`是ES2020新增数据类型,用于支持比Number数据类型支持的范围更大的整数值。使用BigInt,整数溢出的问题将不复存在。
```javascript
// bigint数值,需要在数字后面加字母n
const bigint1: bigint = 999999999999999999n
// 也可以使用BigInt构造函数来表示
const bigint2: bigint = BigInt('9999999999999')
```