2017-09-27 14 views
1

タイプスクリプトをバージョン2.5.3に更新しました。今私は多くの入力ミスを取得します。私は単純化された状況を次のようしている。タイプ 'X'には 'Y'タイプと共通のプロパティはありません

export interface IClassHasMetaImplements { 
    prototype?: any; 
} 

export class UserPermissionModel implements IClassHasMetaImplements { 
    public test() { 
    } 
} 

このコードは、次のエラーを発生させなステートメント:error TS2559: Type 'UserPermissionModel' has no properties in common with type 'IClassHasMetaImplements'.

誰も私がこの問題を解決する助けてもらえます。

ありがとうございます!

答えて

0

インターフェイスは、インターフェイスを実装するオブジェクトが満たす必要がある「契約」を定義します。

IClassHasMetaImplementsインターフェイスはprototypeと定義されています。 testメソッドをUserPermissionModelに追加すると、実装しているインターフェイスにレイアウトされていないものを追加しようとすると、その契約に違反しています。

testをインターフェイスに追加するか、testをプライベートにするか、クラスをクラスから削除してエラーを解決します。ここで

Typescript docs on Interfaces

+0

'test'メソッドをクラスに追加することなくインターフェースに追加することは、本質的に問題ではありません。 'class UserPermissionModel'が' test(){} 'と' prototype:any'の両方を宣言すると、エラーはありません。インターフェイスが実装クラスのメンバーのサブセットをカバーすることは非常に一般的です。 –

+1

'no properties in common'エラーは、TypeScript 2.4で追加された弱いタイプの検出です。 https://blog.mariusschulz.com/2017/12/01/typescript-2-4-weak-type-detection –

2

活字体のweak type detectionがトリガされています。あなたのインターフェイスには必須のプロパティはないので、技術的にはどんなクラスも(TypeScript 2.4より前の)インターフェイスを満たします。

単にあなたのクラスにオプションのプロパティを追加し、あなたのインターフェイスを変更せずにこのエラーを解決するには、次の

export interface IClassHasMetaImplements { 
    prototype?: any; 
} 

export class UserPermissionModel implements IClassHasMetaImplements { 
    public test() {} 
    prototype?: any; 
} 

は全く正しくない前の回答、上でも、私のコメントを参照してください。

関連する問題