前言

TypeScript 是一种静态类型的超集语言,扩展了 JavaScript 的功能。它提供了丰富的数据类型,包括基本数据类型和复杂数据类型。下面是对这些类型的详细解析和一些经典例子。


基本数据类型

  1. 布尔类型(Boolean)

   - 表示逻辑值,只能是truefalse

   - 示例:let isDone: boolean = false;

  1. 数字类型(Number)

   - 用于表示数值,可以是整数或浮点数。

   - TypeScript支持十进制、二进制、八进制和十六进制字面量。

   - 示例:let count: number = 10; let price: number = 3.99;

  1. 字符串类型(String)

   - 用于表示文本数据。

   - 可以使用双引号(””)或单引号(’’)表示字符串。

   - 示例:let message: string = "Hello, TypeScript!";

  1. 空值(Null 和 Undefined)

   - null表示没有任何对象值。

   - undefined表示一个变量被声明了,但没有被赋值。

   - 示例:let value1: null = null; let value2: undefined = undefined;

  1. 枚举类型(Enum)

   - 是对JavaScript标准数据类型的一个补充,用于定义一组命名的常量。

   - 示例:enum Color { Red, Green, Blue } let myColor: Color = Color.Green;

  1. 任意类型(Any)

   - 当在编程阶段不确定变量的类型时,可以使用any类型。

   - 示例:let notSure: any = 4; notSure = "maybe a string"; notSure = false;

  1. 空类型(Void)

   - 表示没有任何类型,一般用于说明函数的返回值不能是undefinednull之外的值。

   - 示例:function logMessage(): void { console.log("This is a log message."); }

  1. never

   - 表示位置类型,通常用于错误位置或总是抛出异常的函数。

   - 例子:`function throwError(message: string): never {

       throw new Error(message);

     }`

复杂数据类型

  1. 数组 - 表示元素集合,可以是固定类型或多种类型。

   - 同类型数组:let list: number[] = [1, 2, 3];

   - 泛型数组:let list: Array<number> = [1, 2, 3];

  1. 元组 - 已知元素数量和类型的数组。

   - 例子:let x: [string, number] = ["hello", 10];

  1. 枚举 - 一组命名的常数。

   - 例子:enum Color {Red, Green, Blue} let c: Color = Color.Green;

  1. 对象 - 表示无序的键值对集合。

   - 例子:`let person = {

       name: “Alice”,

       age: 21

     };`

  1. - 用于创建对象的模板。

   - 例子:

     

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

     class Greeter {

       greeting: string;

       constructor(message: string) {

         this.greeting = message;

       }

       greet() {

         return "Hello, " + this.greeting;

       }

     }

     let greeter = new Greeter("world");

  1. 接口 - 定义了对象的结构,但不实现它。

   - 例子:

     

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

     interface Name {

       name: string;

       age: number;

     }

     function greeter(person: Name) {

       console.log("Hello, " + person.name + "! You are " + person.age + " years old.");

     }

  1. 函数 - 表示一段可重用的代码。

   - 例子:

     

1
2
3
4
5
6
7

     function add(x: number, y: number): number {

       return x + y;

     }

  1. 泛型 - 允许在创建类、接口或函数时使类型成为参数。

   - 例子:

     

1
2
3
4
5
6
7
8
9

     function identity<T>(arg: T): T {

       return arg;

     }

     let output = identity<string>("myString");

  1. 联合类型 - 表示一个值可以是几种类型之一。

   - 例子:let value: string | number = "hello"; // 也可以是 value = 42;

  1. 类型别名 - 为类型创建一个新的名称。

    - 例子:type Name = string; let userName: Name = "TypeScript";

  1. 字面量类型 - 表示原始值的精确类型。

    - 例子:let size: 'small' | 'medium' | 'large' = 'medium';

  1. 索引访问签名 - 允许你访问对象的属性,这些属性的键是字符串或数字。

    - 例子:

     

1
2
3
4
5
6
7
8
9
10
11

      interface StringArray {

        [index: number]: string;

      }

      let myArray: StringArray;

      myArray = ["Bob", "Fred"];

  1. 映射类型 - 创建一个新类型,其属性是从现有类型派生的。

    - 例子:

     
1
2
3
4
5
6
7

      type OptionsFlags = {

        [K in keyof typeof MY_OPTIONS]: boolean;

      };

总结

TypeScript通过丰富的数据类型系统,为JavaScript开发提供了更强的类型安全和代码可读性。基本数据类型和复杂数据类型各有其应用场景,开发者可以根据实际需要选择使用。通过上述经典例子的展示,希望能帮助读者更好地理解TypeScript的数据类型系统。