class 对象的类型是什么,其中 class 实现了一个接口并拥有自己的新成员

what will be the type of class object where the class implements an interface and also has it own new members

我是 OOP 和打字稿的新手,所以这里是示例代码

interface Company{
 compName:string;
 compId: number;
 compAdree:string;
}

class Employee implements Company{
 compName="fb";
 compId=83487;
 compAdree="NY";
 emp_name="peter";
 emp_id=99348493;
 emp_adr="Ny"
}

所以在上面的代码中 class Employee is implementing interface company class 有一些不在接口中的新成员所以如果我创建一个对象 class Employee what将是对象的类型?

我遇到过一些代码,其中它是 class 类型,在一些代码中它是接口类型。所以我很困惑该用哪个

会不会

let emp:Employee = new Employee()

还是会

let emp:Company = new Employee()

您可以将 Company 视为超类型,将 Employee 视为子类型。这意味着 Employee 可分配给 Company。 考虑这个例子:

interface Company {
  compName: string;
  compId: number;
  compAdree: string;
}

class Employee implements Company {
  compName: "fb";
  compId: 83487;
  compAdree: "NY";
  emp_name: "peter";
  emp_id: 99348493;
  emp_adr: "Ny"
}

declare let company: Company;
declare let employee: Employee;

company = employee // ok

反之则不然:

employee=company // error

让我们回到最初的例子。 这一行:

let emp:Employee = new Employee()
emp.compName // ok
emp.emp_adr // ok

意味着 emp 可以使用 CompanyEmployee 的所有属性,而这一行:

let comp: Company = new Employee()
comp.compName // ok
comp.emp_adr // error

意味着 comp 只允许使用 Company 属性,尽管它在运行时也包含 Employee 属性。相当于静态限制。

请参阅Type Compatibility

您可能还注意到 Employee 是一个 class,它同时用于运行时和类型范围。这是一个特殊的 属性 打字稿 classes 和枚举。它们都可能在两个范围内使用。