TypeScript中 type和interface的区别

在 TypeScript 中,typeinterface 都用于定义自定义类型,但它们在某些方面有所不同。本文将详细说明它们的区别,并通过示例来展示它们的使用场景。

1. 基本定义

type

type 关键字用于定义类型别名,可以为任何类型(包括原始类型、联合类型、交叉类型等)创建一个别名。

type StringOrNumber = string | number;

interface

interface 关键字用于定义对象的形状,通常用于描述对象的属性和方法。

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

2. 扩展性

type

type 可以通过交叉类型(&)来扩展。

type Animal = {
  name: string;
};

type Dog = Animal & {
  breed: string;
};

interface

interface 可以通过继承(extends)来扩展。


interface Animal {
  name: string;
}

interface Dog extends Animal {
  breed: string;
}

3. 合并声明

type

type 不支持合并声明。如果尝试定义同名的 type,TypeScript 会报错。

type Person = {
  name: string;
};

// 错误:重复标识符 'Person'
type Person = {
  age: number;
};

interface

interface 支持合并声明。如果定义了同名的 interface,TypeScript 会自动合并它们的属性。


interface Person {
  name: string;
}

interface Person {
  age: number;
}

// 最终 Person 接口包含 name 和 age 两个属性
const person: Person = {
  name: "Alice",
  age: 30,
};

4. 使用场景

type

type 更适合用于定义联合类型、交叉类型、元组等复杂类型。


type ID = string | number;
type Coordinates = [number, number];

interface

interface 更适合用于定义对象的形状,尤其是在面向对象编程中描述类的结构。

interface User {
  id: number;
  username: string;
  login(): void;
}

class Admin implements User {
  id: number;
  username: string;

  constructor(id: number, username: string) {
    this.id = id;
    this.username = username;
  }

  login() {
    console.log("Admin logged in");
  }
}
posted @ 2025-03-01 11:05  编程笔记  阅读(9)  评论(0编辑  收藏  举报