应该如何将 Typescript 模块增强正确导入/包含到 Angular 库或应用程序中?

CSh*_*ark 1 node-modules typescript angular

我发现了许多关于如何设置模块增强文件以向 node_module 添加功能的示例,但我对如何将它们包含在打字稿编译中有点困惑。我是否应该像这样导入在顶部main.ts(或public_api.ts库)进行增强的文件:

import './moduleaugmentationfile';
Run Code Online (Sandbox Code Playgroud)

或者是否有其他标准方法可以使此附加功能在整个应用程序中可用。

编辑:
是一个示例应用程序。示例模块增强位于moduleaugmentation.ts. 我在 中添加了一条评论main.ts,解释了我对如何最好地包含模块增强的困惑。

for*_*d04 5

你的例子看起来不错,这也是增强模块的正确方法。

模块扩充 = 包维护者已经提供了给定 npm 包的类型声明,您想要扩展它。这里重要的是在顶层有一个export/将文件分配给模块范围,否则编译器会期望一个环境模块声明(包不存在类型定义)。import

应该不需要手动包含类型定义(我认为在过去,这可以使用三重斜杠指令来完成,您不使用import全局声明)。如今,编译器使用自动包含(尽管我不太确定不同的 Angular 配置):

如果“files”和“include”均未指定,则编译器默认包含包含目录和子目录中的所有 TypeScript(.ts、.d.ts 和 .tsx)文件,但使用“exclude”属性排除的文件除外。

关于 RxJS 使用的最后一些提示:您可以Observable直接从包根目录导入(请参阅此处以获取 RxJS v6 文档中的示例),例如

import { Observable } from "rxjs"
Run Code Online (Sandbox Code Playgroud)

,因此您不必依赖包内部。

import {Observable} from "rxjs"

declare module "rxjs" {
  interface Observable<T> {
    subscribeAndLog: (a: string) => void
  }
}
Run Code Online (Sandbox Code Playgroud)

干杯,希望有帮助。