跳转到正文

TypeScript 数据结构深度解析 ​

TypeScript 在底层 JavaScript 运行时数据结构之上,赋予了强大的静态类型系统、泛型参数与不可变数据契约:

  • 编译期类型守卫与泛型:通过 <T>、ReadonlyArray<T>、ReadonlyMap<K, V> 消除类型转换错误,保证容器不变量。
  • 现代 ES6+ 容器体系:Array、Map、Set、WeakMap、TypedArray(类型化数组)构成了现代前端与 Node.js 服务端的核心数据基石。

📊 核心结构特征矩阵 ​

容器结构TypeScript 类型签名时间复杂度特征与场景
动态数组T[] / Array<T>索引 $O(1)$,push/pop 均摊 $O(1)$通用序列容器,支持不可变扩展 ([...arr])
键值映射Map<K, V>增删查平均 $O(1)$键类型不受限(支持对象/函数作为 Key)
唯一集合Set<T>增删查平均 $O(1)$快速元素去重与存在性校验
判别联合树type TreeNode<T> (带 kind 标签)遍历 $O(n)$编译器穷尽性检查 (Exhaustiveness checking)

1. 线性结构:泛型动态数组 (DynamicArray<T>) ​

封装类型安全的泛型动态数组类:

ts
export class DynamicArray<T> {
  private items: T[] = [];

  push(item: T): void {
    this.items.push(item);
  }

  get(index: number): T | undefined {
    return this.items[index];
  }

  get size(): number {
    return this.items.length;
  }

  toArray(): T[] {
    return [...this.items];
  }
}

function main() {
  console.log("=== TypeScript Generic Dynamic Array ===");
  const arr = new DynamicArray<number>();
  arr.push(10);
  arr.push(20);
  arr.push(30);

  if (arr.size !== 3 || arr.get(1) !== 20) {
    throw new Error("Assertion failed");
  }

  console.log("TypeScript Array elements:", arr.toArray());
  console.log("TypeScript Dynamic Array tests passed successfully.");
}

main();
🐳 Docker Verified📋node:20-alpine
Exit Code: 0
=== TypeScript Generic Dynamic Array ===
TypeScript Array elements: [ 10, 20, 30 ]
TypeScript Dynamic Array tests passed successfully.

Released under the MIT License.