• 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 }

  • 相关阅读:
    Java内置注解用法、自定义注解
    el-input-number输入框超过限制后自动变为最大值
    C++ 继承
    AI日报:欧盟人工智能法案通过后行业面临合规障碍
    不同平方的电线都能带动哪些家用电器
    解码2022中国网安强星丨“老兵”的热爱与坚持,绿盟科技在网络安全时代里奔赴成长
    python强制停止线程学习
    orangepi香橙派 ubuntu安装RabbitMQ
    高通域控占比接近9成,座舱智能化进入新一轮升级周期
    Resnet模型笔记总结
  • 原文地址:https://blog.csdn.net/xiasohuai/article/details/126571093