自從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')
```