Skip to content
Spotify - 每月低于 10 元

第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 类型的值为 nullundefined,常用于对函数返回值类型定义

  • 严格模式下只能是 undefined

  • 如果函数没有返回值请使用 void 类型,这会使用代码更易读,并可对不小心造成的函数返回内容进行校验

  • 可以将 void 理解为对返回 nullundefined 的函数返回值声明

never

函数返回值使用never与 void 的区别是

  • void 是有 nullundefined 值的
  • 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 = "蓝色",
}
关注微信公众号RackNerd - 美国 163 直连线路
你认为这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0

预览:

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3