2017-01-12 9 views
0

に同じ.TSでは、同じファイルには見つけることができません「インターフェイス名」instanceofは

import { Observable } from 'rxjs/Rx'; 

export interface Loader<T> { 
    (q: string) : Observable<T[]>; 
} 

その後ダウン私が持っているファイルを別のクラスでは、私は以下のコンパイルエラーになります

if (this.field instanceof Loader) 

を持っています

「ローダー」という名前が見つかりません。

これは誤字ではないことを確認しました。

理由は何ですか?

+0

私はあなたがインターフェイスでそれを行うことはできないと思います。少なくとも、ハンドブックの高度なタイプの章が示唆しているものです。 https://www.typescriptlang.org/docs/handbook/advanced-types.html – toskv

答えて

1

インターフェイスでinstanceofを使用することはできません。
インターフェイスはjsにコンパイルされず、instanceofは実行時に発生するものです。

Loaderが関数のようですので、あなたがtype guardを使用する必要がありますが、あなたの場合には、それは容易ではないだろう...
しかし、あなたはこれを行うことができます。問題

function isLoader(obj: any): obj is Loader { 
    return obj && typeof obj === "function"; 
} 

このタイプのガードは、あなたがそれに渡すすべての関数に対して真であることになります。Loaderだけではありません。

関連する問題