聊一聊TypeScript中的数据类型

45 阅读2分钟

前言

TypeScript是一种静态类型的编程语言,它可以在编译时检查和约束变量的数据类型。这样可以避免一些常见的类型错误,提高代码的可读性和可维护性。本文将介绍TypeScript中的数据类型,以及如何使用它们。

有哪些数据类型

下面是一些常见的数据类型及其代码示例:

布尔类型(boolean)

布尔类型只有两个值:truefalse。常用于表示条件判断的结果,例如:

let isDone: boolean = false;
if (!isDone) {
  console.log("Not done yet!");
}

数字类型(number)

数字类型用于表示数值,支持十进制、十六进制、二进制和八进制的数字表示法。常用于进行数值运算和表示计数器,例如:

let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;
console.log(decimal + hex); // 61499

字符串类型(string)

字符串类型用于表示文本,支持使用单引号、双引号和模板字符串来表示。常用于进行字符串拼接和输出,例如:

let name: string = "Allen";
let age: number = 18;
let sentence: string = `Hello, my name is ${name}. I am ${age} years old.`;
console.log(sentence); // Hello, my name is Allen. I am 18 years old.

数组类型(array)

数组类型用于表示一个固定长度的数组,包含相同类型的元素。可以使用 []Array 来定义数组类型。常用于存储一组数据或进行循环遍历,例如:

let list1: number[] = [1, 2, 3];
let list2: Array<number> = [1, 2, 3];
for (let i = 0; i < list1.length; i++) {
  console.log(list1[i]);
}

元组类型(tuple)

元组类型用于表示一个已知长度和类型的数组,各元素的类型不必相同。常用于表示一个对象的属性集合,例如:

let x: [string, number];
x = ["hello", 10];
console.log(x[0].substring(1)); // ello

枚举类型(enum)

枚举类型用于为一组有限的数值取一个易于理解的名字,常用于表示状态、选项或配置,例如:

enum Color {
  Red,
  Green,
  Blue
}
let c: Color = Color.Green;
console.log(c); // 1

任意类型(any)

任意类型可以表示任何类型的值,它与 JavaScript 中的动态类型类似。常用于表示一些无法确定类型的值,例如:

let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false;

空类型(void)

空类型表示没有任何返回值的函数,常用于定义回调函数或执行某些操作但不需要返回值的场景,例如:

function warnUser(): void {
  console.log("This is a warning message");
}
warnUser(); // This is a warning message

null和undefined类型

nullundefined 是两种特殊的类型,分别表示 null 值和 undefined 值。它们通常用于表示缺少值或者变量尚未初始化的情况。

let u: undefined = undefined;
let n: null = null;

在函数调用时,如果需要表示该函数没有返回值,则也可以返回 null

function doSomething(): null {
  // ...
  return null;
}

never类型

never 类型表示不可能出现的值。它通常用于表示错误或异常的情况,或者用于无限循环的函数中。

function error(message: string): never {
  throw new Error(message);
}

function infiniteLoop(): never {
  while (true) {}
}

对象类型

在 TypeScript 中,可以使用对象类型来定义一个变量、参数、返回值等的类型。对象类型通常由一个或多个键值对组成,每个键值对包含一个键和一个对应的值的类型。这个类型可以是一个原始类型,比如 stringnumberboolean 等,也可以是一个其他的对象类型。

下面是一个例子,我们定义了一个 Person 对象类型,它包含了一个 name 属性和一个 age 属性,分别是 string 类型和 number 类型。

type Person = {
  name: string;
  age: number;
}

const person: Person = {
  name: 'Allen',
  age: 18
}

函数类型

在 TypeScript 中,函数也可以有类型,包括参数类型和返回值类型。我们可以使用箭头函数语法来定义一个函数类型。

下面是一个例子:

type Add = (a: number, b: number) => number;

const add: Add = (a, b) => a + b;

在上面的代码中,我们使用 type 关键字来定义了一个 Add 类型,它表示一个接收两个 number 类型的参数并返回一个 number 类型的值的函数类型。然后我们定义了一个 add 变量,它是一个 Add 类型的函数。在函数内部,实现了相加的逻辑,返回两个参数的和。

和JavaScript相比有什么区别

  1. 类型推断:JavaScript 是一门动态类型语言,变量的类型可以在运行时动态确定。而 TypeScript 是一门静态类型语言,需要在编码阶段就确定每个变量的数据类型,从而在编译阶段进行类型检查。这样可以提高代码的可读性、可维护性和可靠性。

  2. 新增类型:TypeScript 提供了一些 JavaScript 没有的数据类型,例如 tupleenumanynevervoid 等。

  3. 类型注解:TypeScript 强制要求对每个变量、函数参数和返回值都加上类型注解,可以使代码更加清晰易懂。

  4. 类型断言:TypeScript 提供了类型断言(Type Assertion)的语法,可以手动指定变量的类型。

  5. 严格的类型检查:TypeScript 的类型检查非常严格,可以发现代码中的潜在错误,提高了代码的质量和稳定性。