- TypeScript 基础
- TypeScript - 首页
- TypeScript - 路线图
- TypeScript - 概述
- TypeScript - 环境搭建
- TypeScript - 基本语法
- TypeScript vs. JavaScript
- TypeScript - 特性
- TypeScript - 变量
- TypeScript - let & const
- TypeScript - 运算符
- TypeScript 基本类型
- TypeScript - 类型
- TypeScript - 类型注解
- TypeScript - 类型推断
- TypeScript - 数字
- TypeScript - 字符串
- TypeScript - 布尔值
- TypeScript - 数组
- TypeScript - 元组
- TypeScript - 枚举
- TypeScript - any
- TypeScript - never
- TypeScript - 联合类型
- TypeScript - 字面量类型
- TypeScript - Symbol
- TypeScript - null vs. undefined
- TypeScript - 类型别名
- TypeScript 控制流
- TypeScript - 决策
- TypeScript - if 语句
- TypeScript - if else 语句
- TypeScript - 嵌套 if 语句
- TypeScript - switch 语句
- TypeScript - 循环
- TypeScript - for 循环
- TypeScript - while 循环
- TypeScript - do while 循环
- TypeScript 函数
- TypeScript - 函数
- TypeScript - 函数类型
- TypeScript - 可选参数
- TypeScript - 默认参数
- TypeScript - 匿名函数
- TypeScript - Function 构造函数
- TypeScript - rest 参数
- TypeScript - 参数解构
- TypeScript - 箭头函数
- TypeScript 接口
- TypeScript - 接口
- TypeScript - 接口扩展
- TypeScript 类和对象
- TypeScript - 类
- TypeScript - 对象
- TypeScript - 访问修饰符
- TypeScript - 只读属性
- TypeScript - 继承
- TypeScript - 静态方法和属性
- TypeScript - 抽象类
- TypeScript - 存取器
- TypeScript - 鸭子类型
- TypeScript 高级类型
- TypeScript - 交叉类型
- TypeScript - 类型保护
- TypeScript - 类型断言
- TypeScript 类型操作
- TypeScript - 从类型创建类型
- TypeScript - keyof 类型运算符
- TypeScript - typeof 类型运算符
- TypeScript - 索引访问类型
- TypeScript - 条件类型
- TypeScript - 映射类型
- TypeScript - 模板字面量类型
- TypeScript 泛型
- TypeScript - 泛型
- TypeScript - 泛型约束
- TypeScript - 泛型接口
- TypeScript - 泛型类
- TypeScript 其他
- TypeScript - 三斜杠指令
- TypeScript - 命名空间
- TypeScript - 模块
- TypeScript - 环境声明
- TypeScript - 装饰器
- TypeScript - 类型兼容性
- TypeScript - Date 对象
- TypeScript - 迭代器和生成器
- TypeScript - Mixin
- TypeScript - 实用类型
- TypeScript - 装箱和拆箱
- TypeScript - tsconfig.json
- 从 JavaScript 到 TypeScript
- TypeScript 有用资源
- TypeScript - 快速指南
- TypeScript - 有用资源
- TypeScript - 讨论
TypeScript - 类型
类型系统表示语言支持的不同值类型。类型系统会在程序存储或操作值之前检查值的有效性。这确保了代码按预期运行。类型系统还可以提供更丰富的代码提示和自动文档。
TypeScript 提供数据类型作为其可选类型系统的一部分。数据类型的分类如下所示:
any 类型
any 数据类型是 TypeScript 中所有类型的超类型。它表示动态类型。使用 any 类型等同于选择不为变量进行类型检查。
内置类型
下表列出了 TypeScript 中所有内置类型:
数据类型 | 关键字 | 描述 |
---|---|---|
数字 | number | 双精度 64 位浮点数。它可以用来表示整数和小数。 |
字符串 | string | 表示 Unicode 字符序列 |
布尔值 | boolean | 表示逻辑值,true 和 false |
空值 | void | 用于函数返回类型,表示不返回函数值的函数 |
空 | null | 表示对象值的故意缺失。 |
未定义 | undefined | 表示赋予所有未初始化变量的值 |
Symbol | symbol | ES2015 中引入的唯一且不可变的基元。 |
对象 | object | 表示用户定义类的实例、数组、函数等。 |
永不存在 | never | 表示永远不会出现的值。 |
TypeScript 和 JavaScript 中没有整数类型。
现在,让我们详细了解每种内置数据类型。
数字
在 TypeScript 中,number 数据类型可以存储整数、浮点数、二进制数、十进制数、十六进制数等。但是,所有整数在 TypeScript 中都表示为浮点数。
示例
在下面的代码中,age 和 marks 两个变量都是 number 类型。age 变量包含整数,marks 变量包含浮点数。
// Integer number let age: number = 30; // Float number let marks: number = 30.5;
字符串
string 数据类型用于存储文本值。
您可以通过三种方式定义字符串
使用单引号
使用双引号
使用反引号
反引号用于创建多行字符串或模板字符串。
示例
在下面的代码中,first_name 字符串使用单引号创建,last_name 字符串使用双引号创建。full_name 字符串使用反引号创建,它使用模板字面量创建字符串。
let first_name: string = 'John'; let last_name: string = "Doe"; let full_name: string = `${first_name} ${last_name}`;
布尔值
在 TypeScript 中,布尔数据类型允许您表示逻辑实体。它存储 true 或 false 值。布尔变量主要用于 if-else 或 switch 等条件语句,根据某些逻辑值执行流程。
示例
在下面的代码中,isReady 是布尔类型的变量,它包含 true 值。
let isReady: boolean = true;
Symbol
symbol 是一种基元数据类型,主要用于创建唯一值。它允许开发者创建不会与任何其他键冲突的唯一对象键。
示例
在这里,我们使用了 Symbol() 构造函数,它返回新的唯一键。我们使用 UNIQUE_KEY 作为 obj 对象的键。
// Define a symbol const UNIQUE_KEY = Symbol(); // Use the symbol as a property key in an object let obj = { [UNIQUE_KEY]: "SecretValue" };
空
TypeScript 中的 null 类型表示对象值的故意缺失。它是基元类型之一,通常用于指示变量故意不指向任何对象。
示例
在下面的代码中,empty 变量包含 null 值。
let empty: null = null;
未定义
undefined 数据类型表示值的缺失。当声明变量但未初始化时,它包含 undefined 值。
示例
在下面的代码中,undef 变量包含 undefined 值。
let undef: undefined;
Null 和 undefined ——它们一样吗?
null 和 undefined 数据类型常常令人困惑。null 和 undefined 不能用于引用变量的数据类型。它们只能作为值赋给变量。
但是,null 和 undefined 不相同。用 undefined 初始化的变量表示该变量没有值或对象分配给它,而 null 表示该变量已设置为值为 undefined 的对象。
对象
object 是一种非基元数据类型,可以包含任何不是数字、字符串、布尔值、symbol、null 或 undefined 的值。您可以使用对象字面量或 Object() 构造函数创建对象。
示例
在下面的代码中,我们使用对象字面量创建了对象。person 变量的类型是一个对象。我们在花括号(对象字面量)之间添加了键值对。
let person: object = {name: "Bob"};
空值
void 类型用于不返回值的函数的返回类型。它表示根本没有类型。
示例
在这里,我们使用 void 数据类型与函数一起使用,以便函数不返回值。
function log(): void { console.log("log"); }
用户定义类型
用户定义类型包括枚举 (enum)、类、接口、数组和元组。这些将在后面的章节中详细讨论。
数组
数组数据类型是相同元素的集合。它存储元素,您可以使用从 0 开始的数组索引访问或更新这些元素。
任何数据类型的数组可以定义为 data_type[] 或 Array<data_type>,其中 <data_type> 可以是任何基元或非基元数据类型。
示例
在下面的代码中,我们定义了一个只包含 3 个元素的数字数组。1 的索引是 0,2 的索引是 1,3 的索引是 2。
let numbers: number[] = [1, 2, 3];
元组
元组类型允许您表达一个具有固定数量元素的数组,这些元素的类型是已知的,但不一定是相同的。在处理需要具有特定结构的数组时,这增加了一层安全性。
示例
在下面的代码中,tuple 变量可以具有长度为 2 的数组作为值。元组的第一个元素是字符串类型,第二个元素是数字类型。
let tuple: [string, number] = ["hello", 10]; console.log(tuple); // Output: ["hello", 10]
枚举
枚举是相关值的集合,可以是数字值或字符串值。enum 使得以更易读的方式处理相关常量集变得更容易。
示例
在下面的代码中,Color 枚举包含不同的颜色。我们可以使用枚举名 Color 后跟一个点和颜色名称值来访问颜色。
enum Color {Red, Green, Blue} let c: Color = Color.Green; console.log(c); // Output: 1