当前位置: 首页 > news >正文

TypeScript-面向对象(接口、类、对象、泛型)

TypeScript 的接口与类学习总结

1. 接口是什么?

接口(interface)定义了一组抽象方法,即只规定了方法的名称和参数,而不提供实现细节。类可以通过实现接口来定义这些方法的具体实现。

接口是为了定义一种契约,让其他类可以根据这个契约实现特定的功能。TypeScript 的接口不会被编译为 JavaScript,它仅在开发和编译阶段起作用,帮助进行类型检查。

2. 接口的使用
  • 接口定义

    interface IPerson {firstName: string;lastName: string;sayHi: () => string;
    }
    

    这个接口规定了对象 IPerson 必须有 firstNamelastName 属性,并实现一个 sayHi 方法。

  • 实现接口

    var customer: IPerson = {firstName: "Tom",lastName: "Hanks",sayHi: (): string => { return "Hi there" }
    };
    console.log(customer.sayHi()); // 输出: Hi there
    
3. 联合类型与接口

接口中的属性可以使用联合类型(多个类型的组合),使得接口更加灵活。例如:

interface RunOptions {program: string;commandline: string[] | string | (() => string);
}

这表示 commandline 属性可以是字符串、字符串数组或一个返回字符串的函数。

4. 接口与数组

接口可以定义数组的索引类型,例如:

interface NameList {[index: number]: string;
}

此接口规定数组的索引是数字,元素必须是字符串。

5. 接口继承

接口可以继承其他接口,甚至多个接口:

  • 单接口继承
    interface Person {age: number;
    }interface Musician extends Person {instrument: string;
    }
    
  • 多接口继承
    interface IParent1 {v1: number;
    }interface IParent2 {v2: number;
    }interface Child extends IParent1, IParent2 {}
    
6. TypeScript 类
  • 类定义与实例化

    class Car {engine: string;constructor(engine: string) {this.engine = engine;}disp(): void {console.log("发动机为: " + this.engine);}
    }let myCar = new Car("V8");
    myCar.disp(); // 输出: 发动机为: V8
    
  • 类的继承
    TypeScript 支持继承(extends):

    class Shape {area: number;constructor(a: number) {this.area = a;}
    }class Circle extends Shape {disp(): void {console.log("圆的面积: " + this.area);}
    }let myCircle = new Circle(223);
    myCircle.disp(); // 输出: 圆的面积: 223
    
  • 静态属性与方法
    静态成员可以通过类直接调用:

    class StaticMem {static num: number;static disp(): void {console.log("num 值为: " + StaticMem.num);}
    }
    StaticMem.num = 12;
    StaticMem.disp(); // 输出: num 值为: 12
    
7. 泛型

泛型是一种设计模式,允许我们编写可重用类型安全的代码。它允许函数、类、接口可以处理不同类型的数据。

  • 泛型函数

    function identity<T>(arg: T): T {return arg;
    }let result = identity<string>("Hello");
    console.log(result); // 输出: Hello
    
  • 泛型类

    class Box<T> {private value: T;constructor(value: T) {this.value = value;}getValue(): T {return this.value;}
    }let stringBox = new Box<string>("TypeScript");
    console.log(stringBox.getValue()); // 输出: TypeScript
    
  • 泛型约束
    可以通过约束限制泛型的类型:

    interface Lengthwise {length: number;
    }function logLength<T extends Lengthwise>(arg: T): void {console.log(arg.length);
    }logLength("hello"); // 输出: 5
    
8. 总结:接口与类的区别
  • 接口是定义对象的结构,而则是实现。
  • 接口可以被多个类实现,具有更大的灵活性;而只能继承自另一个类。
  • 接口不能直接实例化,它是一个规范;而可以创建对象。

TypeScript 通过接口、类和泛型等特性,使得代码更加灵活、安全,并且在开发阶段提供强大的类型检查功能。


http://www.mrgr.cn/news/34130.html

相关文章:

  • 解决msvcr100.dll丢失的方法,5个实测可靠的解决方法
  • 小程序服务商常见问题
  • c语言中孤立位(loner)的使用
  • Vue.js:构建现代 Web 应用的强大框架
  • linux基础-完结(详讲补充)
  • python爬虫指南——初学者避坑篇
  • Docker使用指南
  • 计量校准中测量溯源性是什么?已校准设备要怎么处理?
  • 【机器学习】揭秘GBDT:梯度提升决策树
  • 活字格——低代码界的“黑神话悟空”
  • 报错解决方案
  • 【gradio介绍】Python 可视化 web 神器---gradio介绍
  • 24.9.22(中秋佳节)
  • go webapi上传文件 部属到linux
  • 【Unity保龄球项目】的实现逻辑以及代码解释
  • 【Linux】指令和权限的这些细节,你确定都清楚吗?
  • Ubuntu的基本用法与指令(为后面学习ROS打基础)
  • 【BEV 视图变换】Ray-based(2): 代码复现+画图解释 基于深度估计、bev_pool(代码一键运行)
  • SpringBootWeb响应
  • 如何在产品上扩展大储存?外挂SPI Flash库轻松搞定!
  • 二维矩阵的行、列、斜线特征(二维数组)
  • 深入理解MySQL InnoDB中的B+索引机制
  • 【LLM论文日更】| GRIT如何统一文本生成与嵌入
  • HTTP、FTP 和 DICT,这三个协议,你真的了解吗?
  • JavaScript:数组遍历
  • 小程序开发设计-小程序的宿主环境:组件⑦