Typescript 如何将函数添加到命名空间

Typescript 如何将函数添加到命名空间,typescript,lunrjs,Typescript,Lunrjs,我有一个基于lunr和lunr多语言的Node.js typescript应用程序。已加载@type/lunr,但不存在lunr多语言的类型定义。试图向源代码中添加一些内容以满足编译器的要求。这是原始代码: import lunr from "lunr"; require("lunr-languages/lunr.stemmer.support")(lunr); require("lunr-languages/lunr.multi")(lunr); require("lunr-languages

我有一个基于
lunr
lunr多语言的Node.js typescript应用程序。已加载
@type/lunr
,但不存在
lunr多语言的类型定义。试图向源代码中添加一些内容以满足编译器的要求。这是原始代码:

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抱怨:
错误TS2339:type'typeof import(“D:/Project/node\u modules/@types/lunr/index.D.ts”)上不存在属性“multiLanguage”。

我尝试添加(基于lunr
index.d.ts
definition文件):

在lunr模块导入之前或之后,但错误仍然存在。
Typescript文档谈到了类型合并,但在这里我看不到应该在哪里查找。谢谢

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

export as namespace lunr;
export = lunr;
因此,为了扩展它,您声明:

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

如果查看
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
定义:
函数多语言(lang1:string,lang2:string):任意应该合并并为我这样做。我强烈建议不要修改
node\u modules
中的内容,因为更新模块可能会覆盖您的更改。@SiliconValley:根据ts编译器配置,您可能需要将声明文件重命名为
lunr.d.ts
。不幸的是,这没有合并到命名空间中,它覆盖了名称空间,所以它开始抱怨
lunr.tokenizer
丢失等等。我为自己感到羞愧。解决方法是编辑lunr定义文件(
node_modules/lunr/index.d.ts
),并在
generateStopWordFilter
定义:
函数多语言(lang1:string,lang2:string):任意应该合并并为我这样做。我强烈建议不要修改
node_modules
中的内容,因为更新模块可能会覆盖您的更改。@SiliconValley:根据ts编译器配置,您可能需要将声明文件重命名为
lunr.d.ts
。您好,我现在对“lunr.multi language”也有同样的问题,你能告诉我你是如何解决这个问题的吗?见下面最后三条评论。我现在对“lurn.multiLanguage”也有同样的问题。你能告诉我你是如何解决这个问题的吗?见下面最后三条评论