【问题标题】:How to add function to namespace如何将函数添加到命名空间
【发布时间】:2019-02-22 01:00:04
【问题描述】:

我有一个基于 lunrlunr-multilanguage 的 Node.js 打字稿应用程序。已加载 @type/lunr,但不存在 lunr-multilanguage 的类型定义。试图在我的源代码中添加一些东西以满足编译器。这是原始代码:

import lunr from "lunr";
require("lunr-languages/lunr.stemmer.support")(lunr);
require("lunr-languages/lunr.multi")(lunr);
require("lunr-languages/lunr.it")(lunr);
const englishItalianSupport = lunr.multiLanguage("en", "it");

Typescript 抱怨:error TS2339: Property 'multiLanguage' does not exist on type 'typeof import("D:/Project/node_modules/@types/lunr/index.d.ts")'.

我尝试添加(基于lunrindex.d.ts定义文件):

declare module "lunr" {
    namespace lunr {
        class Index {
            multiLanguage(a: string, b: string): any;
        }
    }
}

在 lunr 模块导入之前或之后,但错误仍然存​​在。 打字稿文档谈到类型合并,但在这里我看不到在哪里看。谢谢!

【问题讨论】:

  • 您好,我现在遇到了与“lunr.multiLanguage”相同的问题,您能告诉我您是如何解决这个问题的吗?
  • 见下面最后三个cmets

标签: typescript lunrjs


【解决方案1】:

如果您查看lunr 定义文件,您可以看到:

export as namespace lunr;
export = lunr;

所以要扩展它,你声明:

declare namespace lunr
{
    function multiLanguage(a: string, b: string): any;
}

【讨论】:

  • 不幸的是,这没有合并到命名空间中,它覆盖了命名空间,所以它开始抱怨lunr.tokenizer缺失等。
  • 我为自己感到羞耻。解决方法是编辑lunr定义文件(node_modules/lunr/index.d.ts)并在generateStopWordFilter定义之后添加:function multiLanguage(lang1: string, lang2: string): any;
  • 这应该合并并且为我这样做。我强烈建议不要修改node_modules 中的内容,因为更新模块可能会覆盖您的更改。
  • @SiliconValley:根据您的 TS 编译器配置,您可能需要将声明文件重命名为 lunr.d.ts
猜你喜欢
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 2013-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
相关资源
最近更新 更多