柳嘉希

硕士研究生毕业生

软件工程师 | 可扩展的API · 网络爬虫 · 数据集成 · Vibe代码清理专家

TypeScript 对象、Record 字典、类与抽象类

TypeScript 不只给变量加类型,也能描述对象结构、字典映射和面向对象模型。

对象类型

const user: { name: string; age: number } = {
  name: "Alice",
  age: 25,
};

复杂对象通常会提取成 typeinterface

interface User {
  name: string;
  age: number;
}

Record 字典

Record<K, V> 用来表示键值映射。

const userAges: Record<string, number> = {
  Alice: 25,
  Bob: 30,
};

也可以限制 key 的范围。

type UserName = "Alice" | "Bob" | "Carol";
 
const scores: Record<UserName, number> = {
  Alice: 90,
  Bob: 88,
  Carol: 95,
};

索引签名

interface ScoreMap {
  [key: string]: number;
}

索引签名适合动态 key,但要注意它允许任何字符串 key。

class Person {
  constructor(
    public name: string,
    private age: number,
  ) {}
 
  greet() {
    return `Hello, ${this.name}`;
  }
}

常见访问修饰符:

  • public:外部可访问
  • private:只在类内部可访问
  • protected:类内部和子类可访问

继承与重写

class Student extends Person {
  override greet() {
    return `Student: ${this.name}`;
  }
}

抽象类

抽象类不能直接实例化,通常用来定义一组子类必须实现的能力。

abstract class Animal {
  abstract speak(): string;
}
 
class Dog extends Animal {
  speak() {
    return "woof";
  }
}

抽象类适合有共享实现和强约束的场景。