• TypeScript type 和 interface区别


    类型别名 type 和 接口 interface 区别与联系

    不同点:

    (1)类型别名type用来给一个类型起个新名字,接口interface是命名数据结构(例如对象)的另一种方式

    (2)type可以用来表示基本类型、对象类型、联合类型、元组和交集;interface仅限于描述对象类型

    (3)interface 定义重名了会合并属性,type 会报错

    (4)interface 可以 extends, type 是不允许 extends ,但是 type 缺可以通过交叉类型 实现 interface 的 extend 行为,并且两者并不是相互独立的,也就是说 interface 可以 extends type, type 也可以 与 interface 类型 交叉

    相同点:

    (1)都可以描述 ObjectFunction

    (2)interface 和 type 都可以继承。

    类型别名 type

    类型别名用来给一个类型起个新名字,使用 type 创建类型别名,类型别名不仅可以用来表示基本类型,还可以用来表示对象类型、联合类型、元组和交集

    1. type userName = string; // 基本类型
    2. type userAge = string | number; // 联合类型
    3. type arr = number[];
    4. // 对象类型
    5. type Person = {
    6. name: userName;
    7. age: userAge;
    8. gender: string;
    9. isDev: boolean;
    10. };
    11. // 泛型
    12. type Tree<T> = { value: T };
    13. const user: Person = {
    14. name: "jiangyx",
    15. age: 18,
    16. gender: "女",
    17. isDev: false,
    18. };
    19. const numarr: arr = [1, 2, 3];

    接口 interface

    接口是命名数据结构(例如对象)的另一种方式;与type 不同,interface仅限于描述对象类型。

    1. type userName = string; // 基本类型
    2. type userAge = string | number; // 联合类型
    3. interface Person {
    4. name: userName;
    5. age: userAge;
    6. gender: string;
    7. isDev: boolean;
    8. }

    两者都可以用来描述对象或函数,但语法不同:

    Type

    1. type Point = {
    2. x: number;
    3. y: number;
    4. };
    5. type SetPoint = (x: number, y: number) => void;

    Interface

    1. interface Point {
    2. x: number;
    3. y: number;
    4. }
    5. interface SetPoint {
    6. (x: number, y: number): void;
    7. }

    二者都可以被继承

    interfacetype 都可以继承。

    另一个值得注意的是,接口和类型别名并不互斥。类型别名可以继承接口,反之亦然。只是在实现形式上,稍微有些差别。

    interface 继承 interface

    1. interface Person{
    2. name:string
    3. }
    4. interface Student extends Person { stuNo: number }

    interface 继承 type

    1. type Person{
    2. name:string
    3. }
    4. interface Student extends Person { stuNo: number }

    type 继承 type

    1. type Person{
    2. name:string
    3. }
    4. type Student = Person & { stuNo: number }

    type 继承 interface

    1. interface Person{
    2. name:string
    3. }
    4. type Student = Person & { stuNo: number }

  • 相关阅读:
    C++ 并发编程实战 第四章 并发操作的同步
    Java入门第一步---配置环境、安装工具(超级详细)
    QT中学习Opengl---(摄像机2)
    Android Studio中BitmapDrawable的使用2-1
    可堆叠的残差注意力模块用于图像分类(Residual Attention Network for Image Classification——代码复现与解读)
    Redis从入门到放弃(9):集群模式
    Go+VsCode配置环境
    C:warning: null argument where non-null required (argument 2) [-Wnonnull]
    电子商务、搜索引擎
    客户管理系统中的常用术语都有哪些 (下)
  • 原文地址:https://blog.csdn.net/xiasohuai/article/details/126571093