1 个回答

鸭子类型

只要一个对象的属性类型跟另一个对象的属性类型都相同,就认为这俩对象是同一种类型,不需要有什么继承之类的 OOP 关系。

我不知道题主有没有其他强类型 OOP 语言的功底,如果有的话就很容易理解了:

以 Java 为例:

class A {
    public string getId() {}
    public void setId(string id) {}
}

class B {
    public string getId() {}
    public void setId(string id) {}
}

A obj1 = new A();
B obj2 = new B();
// 虽然 A 跟 B 的属性类型都一样,但这里 obj1 跟 obj2 在编译器看来不是同一种类型

public static void foo(A a);
foo(obj1); // 编译通过
foo(obj2); // 编译不通过,参数类型不匹配;除非二者有继承关系

而 TS 中则没有此问题:

interface A {
    id: string;
}
interface B {
    id: string;
}
interface C {
    id: number;
}

let obj1: A = { id: '' };
let obj2: B = { id: '' };
let obj3: C = { id: 0 };

function foo(a: A): void {}

foo(obj1); // ok
foo(obj2); // ok
foo(obj3); // error!
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题