基础类型:
-
字符串(string)(String)
let first: string = 'niu' // 直接赋值 let fourth: string = `niu` // 模板字符串 let second: string = String(123) // 内置底层函数String let third: string = new Number(123).toString() // toString方法 // string和String是两种不同的类型,注意区分首字母大小写,String可以兼容string,但是string是无法兼容String的,理解中属于集合中的父子关系,父集可以包含子集,子集无法兼容父级。 let str: string = 'hello'; let strAnother: String = 'hello'; str = strAnother; // 错误提示:不能将类型“String”分配给类型“string”。“string”是基元,但“String”是包装器对象。如可能首选使用“string”。 strAnother = str
所有在JavaScript支持的定义字符串的方法(String方法,模板字符串,toString方法等),都可以直接在TypeScript中使用。
-
数值型(number and bigint)(Number and BigInt)
-
number类型表示支持的十进制整数、浮点数以及二进制、八进制、十六进制数。二进制、八进制、十六进制数有个简单的记忆技巧,首先都是0开头的,它们依次为0b、0o、0x,把0抽离出来就是一个box,这不就是css布局中的常用box盒子吗,哈哈。
let a: number = 10; // 整数 let b: number = 3.14; // 浮点数 let c: number = 0b01; // 二进制 let d: number = 0o01; // 八进制 let e: number = 0x01; // 十六进制 // 注意区分字母大小写,同string类似。
-
bigint类型常用来表示较大的整数,因为number类型采用的是IEEE754二进制浮点数算术标准,它会有一个符号位,即正负占1位,指数位,即大小占11位,尾数部分,即精度占据52位,因此可以显示的数值必须是在-2的-53次方到2的53次方范围内,不包含两个端点。当超出这个范围时候,精度就不准确了,这个时候就采用bigInt去表示。
let a: bigint = 10n; // 注意区分字母大小写,同string类似。
-
number和bigint两种类型是不兼容的,即number不能赋值给类型为bigint的变量,也不能被类型为bigint的变量赋值,对于bigint来讲亦然。
let a: number = 123; let b: bigint = 10n a = b // 错误提示:不能将类型“bigint”分配给类型“number”。 b = a // 错误提示:不能将类型“number”分配给类型“bigint”。 // 注意区分字母大小写,同string类似。
-
-
布尔值(boolean)(Boolean)
let a: boolean = true; let b: boolean = false;
// 注意区分字母大小写,同string类似。
-
symbol (Symbol)
let sym: symbol = Symbol();
// 注意区分字母大小写,同string类似。
-
数组类型(Array)
- 使用[]的形式定义数组类型(推荐使用)
let numberList: number[] = [1, 2, 3] let stringList: string[] = ['1', '2', '3'] let numberOrStringList: (number | string)[] = [1, 2, 3, '1', '2', '3']
- 使用Array泛型定义数组类型
let numberList: Array<number> = [1, 2, 3] let stringList: Array<string> = ['1', '2', '3'] let numberOrStringList: Array<number | string> = [1, 2, 3, '1', '2', '3']
- 使用[]的形式定义数组类型(推荐使用)
-
元组类型(Tuple)
- 元组最重要的特性是可以限制数组元素的个数和类型,特别适合用来实现多值返回。
// 譬如使用React Hooks下的useState时 import { useState } from 'react'; const [key, setKey] = useState('name');
- 使用元组(数组类型的值只有显示添加了元组类型注解后,或者使用as const,声明为只读元组,ts才会把它当做元组,否则推断出来的就是普通的数组类型)
type State = { x: string, y: number } type SetState = (state: State) => void const state = { x: 'hello', y: 100 } const setState = () => {} const x: [State, SetState] = [state, setState];
- 元组最重要的特性是可以限制数组元素的个数和类型,特别适合用来实现多值返回。
特殊类型
-
any
它指的是一个任意类型,是一个选择性绕过静态类型检测的作弊方式。用any类型声明的变量可以赋值给除never以外的任何类型声明的变量,也可以被任何类型声明的变量赋值。
-
unknown
它主要用来描述类型并不确定的变量。用unknown类型声明的变量只能赋值给unknown和any,同时它可以被任何类型声明的变量赋值。
-
void
它仅用于表示没有返回值的函数。即如果该函数没有返回值,那么它的类型就是void.
-
undefined
它最大价值主要体现在接口类型中,表示一个可缺省、未定义的属性。
-
null
它最大价值主要体现在接口指定上,表明对象或属性可能是空值。
-
never
它表示永远不会发生值的类型。用never类型声明的变量可以给所有类型赋值,但是它只能被类型为never的变量赋值。
// 下述函数永远不会有返回值,所以它的返回值类型是never function ThrowError(msg: string): never { throw Error(msg); } function InfiniteLoop(): never { while (true) {} }
-
object
它表示一个非原始类型的类型,基本没啥用。