2017-06-05 44 views
0

多数のクラスを持つCPU制約プロジェクトがあり、各モジュールで使用するインポートの数を最小限に抑えるためにインターフェイスを使用します。しかし、それぞれのインタフェースを実装しているクラスに対してプライベートメソッドを宣言する際には、いくつかの問題があります。現在、私が遭遇しています:インターフェイスを実装するTypeScriptクラスのプライベートメソッド

index.d.tsを:

interface IColony { 
    // (other public properties) 
    // instantiateVirtualComponents(): void; 
} 

Colony.ts

export class Colony implements IColony { 
    // (constructor and other methods) 
    private instantiateVirtualComponents(): void { 
     // (implementation) 
    } 
} 

問題は活字体は、私はこのクラスのプライベートプロパティを宣言できるように思えないということです。であるため、TSCは文句:

Error:(398, 3) TS2322:Type 'IColony' is not assignable to type 'Colony'. Property 'instantiateVirtualComponents' is missing in type 'IColony'. 

私は民間のプロパティとメソッドは、インタフェースで宣言すべきではないことをかなり確信しているが、念のために、私はIColonyにメソッド宣言のコメントを解除した場合、TSCはその後、文句

Error:(10, 14) TS2420:Class 'Colony' incorrectly implements interface 'IColony'. Property 'instantiateVirtualComponents' is private in type 'Colony' but not in type 'IColony'. 

私はここで間違っていますか?インターフェイスを実装しているクラスでprivateメンバーを宣言することはできませんか?

Colony.tshereであり、index.d.tsの関連部分はhereである。あなたがタイプColonyの変数にIColonyのインスタンスを割り当てるしようとしていると、それは(唯一の他のそのように動作していないため、このエラーが発生し

function fn(): IColony { ... } 

let a: Colony = fn(); // error: Type 'IColony' is not assignable to type 'Colony'... 

:あなたは、おそらくのようなものをやっている

+0

[遊び場](https://www.typescriptlang.org/play/)で正常に動作するようです。 TypeScript/tscのどのバージョン? – jonrsharpe

+1

現在、あなたの質問からのコードはそのまま動作しています。私は、インターフェイスの行のコメントを外すときにエラーが発生することを期待しています。エラーとともに、エラーを生成するコードの各ビットを表示したい場合があります。 –

+0

Githubのリンクをフルコードに追加しました。 @jonrsharpe、私はTypeScript 2.3.3を実行しています。 –

答えて

1

道の周りに)。

そのような場合、それは次のようになります。

let a: IColony = fn(); 
関連する問題