TS-类型别名和接口的区别

TypeScript中的类型别名(Type Alias)接口(Interface) 都是用来自定义类型的工具,但他们在语法和使用场景上有一些区别。

  1. 扩展和合并

    • 类型别名:不能直接扩展和合并,但可以通过交叉类型来实现类似的效果。
    type Point3D = Point & {z: number}
    
    • 接口:可以扩展其他接口。
    interface Point3D extends Point {
      z: number;
    }
    interface Point {
      x: number
      y: number
    }
    
  2. 使用场景

    • 类型别名:适用于定义联合类型、交叉类型、元组等复杂类型。
    type StringOrNumber = string | number
    type TupleType = [string, number]
    
    • 接口:适用于定义对象形状,特别是在面向对象编程中定义类和对象的接口。
    interface Person {
    	name: string
    	age: number
    }
    
  3. 实现和继承

    • 类型别名:不能被实现
    • 接口:可以被类实现
    class MyPoint implements Point {
    	x: number
    	y: number
    }
    
  4. 字面量类型

    • 类型别名:可以定义字面量类型
    type Direction = 'N' | 'S' | 'E' | 'W'
    
    • 接口:不能定义字面量类型
  5. 工具类型

    • 类型别名:可以定义工具类型
    type Partial<T> = {
      [P in keyof T]?: T[P];
    };
    
    • 接口:不能定义工具类型

总结

  • 类型别名:适用于定义复杂类型、联合类型、交叉类型、元组等,但不能被类实现。
  • 接口: 适用于定义对象的形状,特别是在面向对象编程中定义类和对象的接口,可以被类实现,可以扩展和合并
  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值