inheritance - 在 TypeScript 中,一个接口(interface)可以扩展一个类,这是为了什么?

标签 inheritance typescript interface

TypeScript Handbook
在“将类用作接口(interface)”部分中,有一个扩展类的接口(interface)示例。
class Point { ... } interface Point3d extends Point {...}
这什么时候有用?你有这方面的实际例子吗?

最佳答案

以这个类为例:

class MyClass {
    public num: number;
    public str: string;

    public constructor(num: number, str: string) {
        this.num = num;
        this.str = str;
    }

    public fn(arr: any[]): boolean {
        // do something
    }
}

您可以像这样创建一个实例:
let a1 = new MyClass(4, "hey");

但是您也可以创建一个满足相同接口(interface)的对象,如下所示:
let a2 = {
    num: 3,
    str: "hey",
    fn: function(arr: any[]): boolean {
        // do something
    }
}
a1instanceof MyClass , 而 a2只是一个对象,但它们都实现了相同的接口(interface)。
接口(interface)扩展类的意义在于,您可以获取类定义的接口(interface)并对其进行扩展。

由于语言的性质,这可能只是一种可能性,但这里有一个可能有用的例子:
class Map<T> {
    private _items: { [key: string]: T };

    set(key: string, value: T) { ... }

    has(key: string): boolean { ... }

    get(key: string): T { ... }

    remove(key: string): T { ... }
}

interface NumberMap extends Map<number> {}
interface StringMap extends Map<string> {}
interface BooleanMap extends Map<boolean> {}

function stringsHandler(map: StringMap) { ... }

关于inheritance - 在 TypeScript 中,一个接口(interface)可以扩展一个类,这是为了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39124915/

相关文章:

java - 子类中的构造函数参数

javascript - 如何访问类函数内的类变量?

c# - 通过通用接口(interface)封装的正确方法

java - 实现某个接口(interface)并具有特定父类(super class)的参数 : generics or instanceof?

java - 传递对象的实现而不进行强制转换

.net - 如何使用.Net中的反射从密封类继承?

c++ - C++ 中 operator= 的奇怪行为

Angular 键值管道排序属性/按顺序迭代

unit-testing - Angular 2 - TestBed.configureTestingModule - 供应商 :[] throws Use of reserved word 'import' error

views - Backbone.js 继承 View