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

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.kler.cn/a/317705.html

相关文章:

  • 《Python Web 抓取实战:豆瓣电影 Top 250 数据抓取与分析》
  • 计算机网络 (1)互联网的组成
  • websocket初始化
  • Ubuntu配置阿里云docker apt源
  • Llama架构及代码详解
  • Linux基础1
  • 1.5 计算机网络的性能指标
  • Git可视化工具和基础命令
  • vue3<script setup>中使用reactive包裹的对象被重新赋值失去响应式原因和解决方式
  • C#控件开发能够阅读的书籍
  • ESP8266+DHT11+Python制作一个物联网温湿度传感器
  • 基于C#+SQL Server2005(WinForm)图书管理系统
  • 多边形抠图 python
  • python爬虫案例——抓取链家租房信息
  • IPsec-Vpn
  • 6、论文阅读:水下图像增强基准数据集及其他数据集
  • 【Godot4.3】三角形类
  • lunar无第三方依赖的公历、农历、法定节假日...日历工具库
  • 什么是单例模式?
  • 用最新的C++技术,如何实现一个序列化工具库?
  • CSS的盒子模型(Box Model)
  • 2024年最强网络安全学习路线,详细到直接上清华的教材!
  • sftp上传文件报错提示“Permission denied“
  • geodatatool(地图资源下载工具)3.8更新
  • JavaScript 网页设计案例详解( 最新技术趋势)
  • jmeter本身常用性能优化方法