TypeScript 的类型

在 TypeScript 中,类型用于定义变量、函数参数、返回值等的结构。以下是 TypeScript 中常见的类型及其相关概念:

1. 基本类型 (Primitive Types)

这些类型用于定义最基础的数据结构:

  • number: 数字类型,支持整数和浮点数。

    typescriptCopy Code
    let age: number = 30;
    let price: number = 99.99;
  • string: 字符串类型。

    typescriptCopy Code
    let name: string = "John";
    let message: string = `Hello, ${name}`;
  • boolean: 布尔值类型,只有 truefalse 两个值。

    typescriptCopy Code
    let isActive: boolean = true;
  • null: 空值类型,表示无值。

    typescriptCopy Code
    let value: null = null;
  • undefined: 未定义类型,表示一个变量未被赋值时的默认状态。

    typescriptCopy Code
    let value: undefined = undefined;
  • symbol: ES6 引入的一种新的基本数据类型,表示唯一的值。

    typescriptCopy Code
    let sym: symbol = Symbol('description');
  • bigint: 支持大整数类型,适用于大于 2^53 - 1 或小于 -2^53 + 1 的整数。

    typescriptCopy Code
    let bigNum: bigint = 1234567890123456789012345678901234567890n;

2. 对象类型 (Object Types)

  • object: 表示一个非原始类型,通常用于定义对象的结构。

    typescriptCopy Code
    let obj: object = { name: 'John', age: 30 };
  • 对象字面量类型: 可以显式地定义对象的结构。

    typescriptCopy Code
    let person: { name: string, age: number } = { name: 'Alice', age: 25 };

3. 数组类型 (Array Types)

  • Array<type>: 定义元素类型相同的数组。

    typescriptCopy Code
    let numbers: Array<number> = [1, 2, 3];
  • type[]: 另一种数组的写法,等同于 Array<type>

    typescriptCopy Code
    let names: string[] = ['Alice', 'Bob', 'Charlie'];

4. 元组类型 (Tuple Types)

元组是一种已知元素数量和类型的数组。

typescriptCopy Code
let tuple: [string, number] = ['Alice', 30];

元组支持不同类型的元素,但要求严格按位置和类型定义。

5. 函数类型 (Function Types)

函数类型用于描述函数的参数和返回值类型。

typescriptCopy Code
let add: (a: number, b: number) => number = (a, b) => a + b;

6. 联合类型 (Union Types)

联合类型允许一个变量拥有多个类型。

typescriptCopy Code
let value: string | number = "Hello";
value = 42;  // 也可以是数字

7. 交叉类型 (Intersection Types)

交叉类型用于组合多个类型,表示一个变量同时具有多个类型。

typescriptCopy Code
type A = { name: string };
type B = { age: number };
type C = A & B;

let person: C = { name: "Alice", age: 30 };

8. 字面量类型 (Literal Types)

字面量类型指的是使用特定的值作为类型,例如:特定的字符串、数字等。

typescriptCopy Code
let direction: "left" | "right" = "left";
let score: 10 | 20 | 30 = 20;

9. 枚举类型 (Enums)

枚举类型用于定义一组命名常量。

typescriptCopy Code
enum Direction {
  Up = "UP",
  Down = "DOWN",
  Left = "LEFT",
  Right = "RIGHT",
}

let direction: Direction = Direction.Up;

10. 类型别名 (Type Aliases)

类型别名允许为类型创建自定义名称。

typescriptCopy Code
type Point = { x: number, y: number };
let point: Point = { x: 10, y: 20 };

11. 类型断言 (Type Assertion)

类型断言用于明确告知 TypeScript 某个变量的类型。

typescriptCopy Code
let someValue: any = "Hello, TypeScript!";
let strLength: number = (someValue as string).length;

12. 类型推导 (Type Inference)

TypeScript 会自动推导变量的类型。

typescriptCopy Code
let num = 10;  // TypeScript 会推导 num 为 number 类型

13. any 类型

any 类型表示可以接受任何类型的值。使用 any 类型时,TypeScript 不会对值的类型进行检查。

typescriptCopy Code
let data: any = 42;
data = "string";  // 可以赋值任何类型

14. unknown 类型

unknown 类型类似于 any,但在使用之前必须进行某种类型检查。

typescriptCopy Code
let value: unknown = 30;
if (typeof value === "number") {
  let num: number = value;  // 必须先进行类型检查
}

15. never 类型

never 类型表示那些永远不会有值的类型。通常用于函数总是抛出错误或进入无限循环的场景。

typescriptCopy Code
function throwError(message: string): never {
  throw new Error(message);
}

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

16. void 类型

void 类型通常用于没有返回值的函数。

typescriptCopy Code
function logMessage(message: string): void {
  console.log(message);
}

17. this 类型

this 类型用于限制函数或方法中的 this 上下文。

typescriptCopy Code
class Counter {
  count = 0;
  increment(): this {
    this.count++;
    return this;
  }
}

let counter = new Counter();
counter.increment().increment();  // 可以链式调用

总结

TypeScript 提供了丰富的类型系统来增强 JavaScript 的类型安全性和可维护性,包括基本类型、对象、函数、数组、联合类型、交叉类型、字面量类型等。这些类型能够帮助开发者更精确地描述数据结构,从而减少类型错误,提升代码的可读性和可维护性。

posted @   多见多闻  阅读(33)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2023-01-01 流畅的Flurl.Http
点击右上角即可分享
微信分享提示