第2章 数据类型
基本类型
string
- 字符串使用 string 声明
ts
let myName: string = 'zhichao';
number
- 数值使用 number 声明
ts
let num1: number = 10; // 十进制
let num2: number = 0b1010; // 二进制
let num3: number = 0o12; // 八进制
let num4: number = 0xa; // 十六进制
boolean
- 布尔类型使用 boolean 声明
ts
let state: boolean = true;
undefined & null
ts
let u: undefined = undefined;
let n: null = null;
any
- 使用
any
类型等同于使用 JavaScript 的开发方式 any
类型是顶部类型,所有其他类型是他的子类型- 使用
any
类型将失去 TypeScript 静态类型的强制检测 - 只有在描述一个根本不知道的类型时使用
any
unkown
unknown
用于表示暂时未知的类型- 与
any
的区别是any
不进行 TS 校验,unknown
会进行 TS 的类型检查 - 使用
unknown
类型时一般需要 as 类型断言来转换类型
ts
let myName: unknown = 'zhichao'; // 类型为unknown
let copyMyName: string = myName; // 赋值失败
let copyMyName: string = myName as string; // 添加断言后 赋值成功
void
void
类型的值为null
或undefined
,常用于对函数返回值类型定义严格模式下只能是
undefined
如果函数没有返回值请使用 void 类型,这会使用代码更易读,并可对不小心造成的函数返回内容进行校验
可以将
void
理解为对返回null
或undefined
的函数返回值声明
never
函数返回值使用never与 void 的区别是
void
是有null
或undefined
值的never
是永远不会结束的函数,所以也不会有返回值
ts
const neverFun = (): never => {
throw new Error('出错了');
};
联合类型
- 声明为联合类型,可以为变量声明多种类型
- 使用
|
连接两种类型
ts
let numOrStr: number | string = 'zhichao';
numOrStr = 18; // 不会报错
numOrStr = true; // 会报错
交叉类型
- 声明为交叉类型,变量需要同时满足两种类型
- 使用
&
连接两种类型
ts
type Name = {
name: string;
};
type Age = {
age: number;
};
type NameAndAge = Name & Age;
const obj: NameAndAge = {
name: 'zhichao',
age: 18
};
复杂类型
Array
- 数组类型可以使用
number[]
声明 - 也可以使用泛型
Array<string>
的方式声明
ts
let numArr: number[] = [1, 2, 3];
let strArr: Array<string> = ['lbviic', 'zhichao'];
Object
ts
// 声明对象类型
let obj: object;
obj = { name: 'zhichao' };
obj = {}; // 使用字面量声明对象
obj = []; // 数组是对象
obj = Object.prototype; // 原型对象
obj = 'zhichao'; // 报错,改变了类型为字符串
// 限定具体类型
let obj: { name: string; age: number } = { name: 'zhichao', age: 18 };
let obj: { name: string; age: number } = { name: 'zhichao'}; // 报错,少了age
// 通过 ? 来声明可选类型
let obj: { name: string; age?: number } = { name: 'zhichao'};
Tuple
- 元组是明确每个成员值类型的数组
ts
let tuple1: [string, number] = ['hello', 10];
tuple1 = [10, 'hello']; // 报错,类型和顺序要一一对应
Enum
ts
// 不设置值时,值以0开始递增
enum Color {
Red, // 0
Green, // 1
Blue, // 2
}
// 枚举成员与值可以互相访问(值不可以是字符串)
console.log(Color.Red); // 0
console.log(Color[0]) // Red
// 当某个字段设置数值类型的值后,后面的在它基础上递增
enum Color {
Red, // 0
Green = 2, // 2
Blue, // 3
}
// 值设置为其他类型时,后面的值都需要设置
enum Color {
Red = "红色",
Green = "绿色",
Blue = "蓝色",
}
预览: