2013-01-04 9 views
5

私はTypeScriptインターフェイスを持っています。問題は約40人のメンバーがいることです。私がそれを使用して、選ばれたメンバーだけを実装すると、いくらか欠けているというエラーが出ます。どのようにそれを無視するには?それらをすべて実装する必要がありますか?この問題は、あるタイプを別のタイプにキャストできないようにします。すべてのインターフェイスメンバーを実装する

など。

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

に対処したい場合は、オプションとして項目をマークすることができます40のプロパティを実装し、基本クラスを持っているだろう:

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

実装には名前が必須であり、アドレスは任意です

+0

+1 - これは良い提案です。 – Fenton

+1

インターフェイス全体を実装する必要がありますが、ここに示すようにいくつかのオプションを設定できます。しかし、あなたが真剣にいくつかの実装がすべて欲しいのですが、別のセットが必要な場合は、@SteveFentonが以下のように作成することができます –

5

インターフェイスを実装することを約束したら、それをすべて実装する必要があります。

一つの解決策は、あなただけB.

で5つの性質typescriptですにおける
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

インターフェイス内のアイテムはかなりあります。

また、特定のクラスに5つしか必要ない場合は、設計上の問題を示します。

複数の関連するインターフェイスを持ち、プロパティをより多くの論理グループに分割することもできます。

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

次に、複数のインターフェイスを実際に実装するクラスを作成できます。

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

また、あなたは、オブジェクトが実際にそのクラスであり、特定されない限り、特定のクラスにインターフェースからのキャストは避けるべきです。オブジェクトが実際にその型でない場合には、実際には存在しないクラスのメソッドを使用しようとすると、問題が発生します。

関連する問題