2013-01-04 76 views
5

我有一个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:/) 
+1

我遇到的所有语言的接口规则是您必须实现其所有方法。 –

回答

10

在打字稿你可以标记的项目为可选:

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

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

+0

+1 - 这是一个很好的建议。 – Fenton

+1

你必须实现整个界面,但你可以做一些可选的,如下所示。然而,如果你真的想要所有的一些实现有时,但其他时候你想要一个不同的设置,你可以创建一些东西,如下面的@SteveFenton所示 –

5

如果你保证你实现了一个接口,你必须实现这一切。

一个解决办法是有一个实现了40种性质的基类,如果你只想处理5种性质B.

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; 
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 ... 

此外,你应该避免从接口转换到特定的类,除非你确定该对象实际上是该类。如果您尝试使用该类的方法,如果该对象不是真正的类型,那么实际上并不存在该问题。

相关问题