JavaScript 和 TypeScript 的数据类型有些相似,但 TypeScript 在 JavaScript 的基础上添加了静态类型检查和更多的类型系统特性。下面是两者的对比:
1. JavaScript 数据类型
JavaScript 有 7 种基本数据类型:
-
原始类型(Primitive types):
Number
: 数字类型(包括整数和浮点数)。String
: 字符串类型。Boolean
: 布尔值(true
或false
)。Null
: 表示“无”或“空”值。Undefined
: 未定义,通常是没有赋值的变量。Symbol
: 新增于 ES6,表示唯一的值,用于对象属性的唯一标识。BigInt
: 用于表示任意精度的整数(ES11 引入)。
-
引用类型(Reference types):
Object
: 对象类型,包括数组、函数、普通对象等。Array
: 数组类型(数组也是对象的一种形式)。Function
: 函数类型。
2. TypeScript 数据类型
TypeScript 继承了 JavaScript 的数据类型,同时增加了静态类型检查和更多的类型系统功能。TypeScript 的类型分为两大类:基本类型 和 高级类型。
基本数据类型:
number
: 表示数值类型(包括整数、浮点数、BigInt 的类型)。string
: 表示字符串类型。boolean
: 布尔值类型。null
: 表示“无”或“空”值。undefined
: 表示未定义的变量类型。symbol
: 符号类型,用于创建唯一的标识符。bigint
: 用于表示大整数类型。
这些基本类型与 JavaScript 中的原始类型基本一致。
高级类型:
-
数组类型:使用
type[]
或Array<type>
来定义数组类型。let numbers: number[] = [1, 2, 3]; // 或者 let numbers: Array<number> = [1, 2, 3];
-
元组类型:允许数组中的元素类型不同。
let tuple: [string, number] = ['hello', 42];
-
枚举类型:
enum
用于定义一组命名的常量。enum Color {Red,Green,Blue } let c: Color = Color.Green;
-
Any 类型:可以赋值为任意类型,不进行类型检查。用于处理动态内容,但不推荐滥用。
let anything: any = 42; anything = 'Hello'; anything = true;
-
Void 类型:表示没有返回值的函数的返回类型。
function log(message: string): void {console.log(message); }
-
Never 类型:表示永远不会发生的类型,常用于函数抛出异常或陷入无限循环的情况。
function throwError(message: string): never {throw new Error(message); }
-
Object 类型:表示所有非原始类型。
let obj: object = { name: "Alice" };
-
Union 类型:允许一个变量是几种类型中的一种。
let value: string | number = 42; value = 'Hello';
-
Intersection 类型:组合多个类型,表示同时符合多个类型的要求。
interface Person {name: string; }interface Employee {id: number; }type EmployeePerson = Person & Employee;
-
Literal 类型:表示特定的值。
let direction: 'up' | 'down' = 'up';
-
Type Alias:为类型创建别名。
type StringOrNumber = string | number; let value: StringOrNumber = 'Hello'; value = 42;
-
Interface:用于定义对象的形状,可以扩展其他接口,支持继承。
interface Person {name: string;age: number; }
特殊数据类型:
- Unknown 类型:类似于
any
,但在赋值给其他变量之前,必须进行类型检查。let unknownValue: unknown = 42; if (typeof unknownValue === 'number') {let num: number = unknownValue; // 现在可以安全使用 }
总结:
- JavaScript 数据类型是动态的,通常没有强制的类型检查。
- TypeScript 扩展了 JavaScript 的类型系统,允许开发者在编译时发现类型错误,并且支持类型推断、静态类型检查以及更复杂的类型特性(如泛型、接口、联合类型等)。
TypeScript 提供了更加严格的类型系统,可以帮助你在编写代码时避免类型错误,提高代码的可维护性和可读性。