在instanceof中找不到'InterfaceName'

时间:2017-01-12 11:42:48

标签: angular typescript

在同一个.ts文件中我有

import { Observable } from 'rxjs/Rx';

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

稍后在同一个文件中,我在另一个班级

if (this.field instanceof Loader)

,它给出了以下编译错误

  

找不到名字'Loader'。

我确认这不是拼写错误。

知道为什么吗?

1 个答案:

答案 0 :(得分:1)

您无法在界面上使用instanceof 接口没有编译为js,instanceof是在运行时发生的事情。

您需要使用type guard,但在您的情况下,它不会轻松,因为Loader似乎是一个功能...
但你可以这样做:

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

问题是这个类型后卫对于你传递给它的每个函数都是正确的,而不仅仅是Loader