2017-09-01 2 views
3

Iはこのシグネチャには何が問題なのですか? (typescriptです-2.5)

export class NodeJsTestingFrameworkAdapter implements ITypeAssertions 
{ 
    isOfTypeElseFail<TExpected extends TActual, TActual>(value: TActual, oxIsOfType: (xVal: TActual) => boolean): value is TExpected 
    { 
     throw new Error("Method not implemented."); 
    } 
} 

コンパイラはその文句インターフェース

export interface ITypeAssertions 
    { 
     isOfTypeElseFail<TExpected extends TActual, TActual>(value: TActual, oxIsOfType: (xVal: TActual) => boolean): value is TExpected; 
    } 

及び実装を有する:

  • インターフェース-適切に実装されていない

    • (...)

      • タイプ述語 'の値が触覚では、' 割り当て可能ではないの 'の値が TExpectedされる'
        • タイプ '触覚' は 'TExpected'を型に代入ではありません

何が問題なのですか?これは型チェッカーのバグですか?

PS。それはTs-2.3の下でコンパイルされました。ジェネリックとして

+0

戻り値が型ガードであることを本当に推測していますが、それを返すように変更すると、それは私のために機能します –

+0

@ TitianCernicova-Dragomirしかし、戻り値を 'value'から' bool'に変更するとOPが望むような一般的なタイプのガードではありませんか? – Pac0

+1

バージョン2.4では、より一般的な型の推論が導入されました。残念ながら、なぜこれが起こっているのか正確に理解することは難しいです。見知らぬ人でも、ユーザー定義の型警備員なしで機能するという事実です。公式のTypeScriptリポジトリに問題を提出することをお勧めします。 –

答えて

1

現在、github.com/Microsoft/TypeScript/issues/18202の回答に記載されているように、動作させる機会はありません。

+0

。そして、実際には、私は少し安心しています。私はコンパイルチェックの種類が「あまりにも多すぎる」ことなく、実際にどのように動作するかを理解しようとしました。 +1の言語の直接レポからの決定的な答え。 – Pac0

0

あなたがinterface(とないインターフェイスメソッド)を定義するために注意する必要がありますし、class(とないインタフェースの実装方法):

interface ITypeAssertions<TActual, TExpected extends TActual> 
{ 
    isOfTypeElseFail(value: TActual, oxIsOfType: (xVal: TActual) => boolean): value is TExpected; 
} 

export class NodeJsTestingFrameworkAdapter<TActual, TExpected extends TActual> implements ITypeAssertions<TActual, TExpected> 
{ 
    isOfTypeElseFail (value: TActual, oxIsOfType: (xVal: TActual) => boolean): value is TExpected 
    { 
     return true; 
    } 
} 

これはTypescript playgroundにコンパイルされます。

残念なことに、あなたのコメントによると、これはそれぞれのタイプのペアでクラスを実装する必要があるため、これはあなたが望むものではありません。

+0

として登録されていますが、私は全体の型をパラメータ化することは望ましくありません。それは私がテストしたいオブジェクトのあらゆる種類のインタフェースを実装することにつながります。私は、テスター:ITypeAssertions = ...)、(テスター:ITypeAssertions = ...)などが必要です。確かに – user3284063

関連する問題