【问题标题】:Typescript class can only be found if there isn't a reference to its properties?只有在没有对其属性的引用时才能找到 Typescript 类?
【发布时间】:2016-10-05 06:58:41
【问题描述】:

我在 VSCode 中使用 TypeScript 2.0,但是,突出显示的错误都已由 TypeScript 编译器确认。所以我正在导入一个模块:

import * as els from 'elasticsearch';

elasticsearch 已安装定义,例如npm i @types/elasticsearch -S

现在,如果在我的班级中,我有一个 els 类型的属性,如下所示:

private _client: els.Client;

不过,如果我有这样类型的属性,则没有问题:

search(term: string): Promise<els.Client.search> {}

然后我得到错误:

模块“Elasticsearch”没有导出成员“客户端”

如果我正在寻找它的属性之一,但如果我只是寻找它,怎么会找不到该类?

【问题讨论】:

    标签: node.js typescript


    【解决方案1】:

    你是对的,错误信息令人困惑。它源于您尝试使用 els.Client.search 作为类型。如果您尝试这样做,您会收到类似的消息:

    import * as els from 'elasticsearch';
    
    class Foo {
        private _client: els.Client;
    
        y: els.Client.search;
    
        bar() {}
    
        x: Foo.bar;
    }
    

    错误 TS2305:模块“Elasticsearch”没有导出的成员“客户端”。

    错误 TS2503:找不到命名空间“Foo”。

    请注意它在第二条消息中如何抱怨它无法在 Foo 类中找到 Foo。你可以考虑发布一个关于这个的打字稿问题。

    如果我正在寻找其中的一个类,怎么会找不到该类 属性,但如果我只是寻找它就不会?

    真正的问题是您可能希望search 的返回类型与els.Client.search 的返回类型相同。我认为除了复制els.Client.search 声明之外没有更好的方法:

    search<T>(term: string): Promise<els.SearchResponse<T>> {}
    

    【讨论】:

      猜你喜欢
      • 2020-08-21
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多