实现所有接口成员

时间:2013-01-04 11:40:31

标签: typescript

我有一个TypeScript界面​​。问题是它有大约40个成员。当我使用它并且我只实现选择的成员时,我得到一个错误,有一些缺失。怎么忽略它?我必须全部实施吗?这个问题阻止我将一种类型转换为另一种类型。

E.g。

interface A {
   // 40 members
}

class B implements A {
   // only 5 members implemented
}

// somewhere in the code
var myVar1: A = something;
var myVar2: B = <B> myVar1; // here an error (can't convert because B has missing some properties and methods:/)

3 个答案:

答案 0 :(得分:10)

在打字稿中,您可以将项目标记为可选项:

interface Person {
    name: string;
    address?: string;
}

名称是必需的,地址是可选的实施

答案 1 :(得分:5)

如果您承诺实现接口,则必须全部实现。

如果您只想处理B中的5个属性,一个解决方案是拥有一个实现40个属性的基类。

interface A {
   propA: string;
   propB: string;
}

class C implements A {
    public propA = "";
    public propB = "";
}

class B extends C {
   public propB = "Example";
}

var myVar1: A;
var myVar2: B = <B> myVar1;

答案 2 :(得分:4)

界面中的40个项目非常多。

此外,如果某个类只需要5,则表示存在设计问题。

另一种设计是拥有多个相关接口,并将属性划分为更多逻辑组。

interface ICar ...
interface IRacingCar : ICar
interface IFlyingCar : ICar
interface IFamilyCar : ICar

然后你可以拥有一个实际实现多个接口的类。

class RaceCar: IRacingCar ...
class FlyingRaceCar: IRaceCar, IFlyingCar ...
class FlyingFamilyCar: IFlyingCar, IFamilyCar ...

此外,除非您确定对象实际上是该类,否则应避免从接口转换为特定类。如果您尝试使用该类的方法,如果该对象实际上不存在该类型,则会出现此问题。