多数のクラスを持つ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.ts
はhereであり、index.d.ts
の関連部分はhereである。あなたがタイプColony
の変数にIColony
のインスタンスを割り当てるしようとしていると、それは(唯一の他のそのように動作していないため、このエラーが発生し
function fn(): IColony { ... }
let a: Colony = fn(); // error: Type 'IColony' is not assignable to type 'Colony'...
:あなたは、おそらくのようなものをやっている
[遊び場](https://www.typescriptlang.org/play/)で正常に動作するようです。 TypeScript/tscのどのバージョン? – jonrsharpe
現在、あなたの質問からのコードはそのまま動作しています。私は、インターフェイスの行のコメントを外すときにエラーが発生することを期待しています。エラーとともに、エラーを生成するコードの各ビットを表示したい場合があります。 –
Githubのリンクをフルコードに追加しました。 @jonrsharpe、私はTypeScript 2.3.3を実行しています。 –