在 tsconfig.json 中启用声明和声明映射的用例是什么?

Sat*_*mar 17 typescript tsconfig

如果我们启用允许我们在浏览器上调试的 sourcemap。同样寻找声明和声明映射的用例。

我已经在互联网上进行了搜索,但除了生成 .d.ts 文件之外,我的错误找不到实际的用例。

for*_*d04 17

生成.d.ts文件正是declaration编译器选项的用例,因此构建输出为.js,而所有类型定义仍然可以为使用您的项目的其他 TS 项目保留。

IDE 可以使用declarationMap选项来提供更好的开发人员体验:当您当前.d.ts打开了相应的文件并想要查看其实现时,它使您能够快速导航到原始源(另请参阅此答案)。

在 --declaration 旁边启用 --declarationMap 会导致编译器在输出 .d.ts 文件旁边发出 .d.ts.map 文件。语言服务现在还可以理解这些映射文件,并在可用时使用它们将基于声明文件的定义位置映射到其原始源。

换句话说,在使用 --declarationMap 生成的 .d.ts 文件中的声明上点击 go-to-definition 会将您带到定义该声明的源文件 (.ts) 位置,而不是 .d。 ts。


Yog*_*ity 6

随着您的应用程序的增长,Typescript 对您的代码进行类型检查和编译所需的时间会越来越长。对于大型代码库,缓慢的编译时间会严重减慢您的开发速度。为了克服这个问题,从 Typescript 3.0 开始,您可以使用Project References将您的大项目拆分为较小的子项目。declarationdeclarationMap选项在这里发挥着重要作用。


declaration 选项

启用该declaration选项将导致 Typescript 编译器创建声明文件 ( .d.ts)。这些.d.ts文件包含在相应.ts文件中使用的类型的声明。它们不包含类型的实现,它们只包含可公开访问的类型声明。

因此,任何人都可以在其他 Typescript 项目中使用您的 Typescript 项目中的类型。编译器可以在您的.d.ts文件的帮助下对该其他项目中的代码进行类型检查,即使它们无权访问您的项目。

当您将一个大项目拆分为多个较小的子项目时,这会有所帮助。子项目可以访问彼此的声明文件。当您的一个子项目(例如 B)依赖于另一个子项目(例如 A)中声明的类型时,编译器使用.d.ts子项目 A 中的文件进行类型检查并编译子项目 B,而无需用于再次编译子项目A。这导致大型项目中的编译时间更快。


declarationMap 选项

当您启用该declarationMap选项时,Typescript 编译器会创建声明源映射 ( .d.ts.map) 文件。声明源映射文件包含映射定义,这些映射定义将文件中生成的每个类型声明链接.d.ts回原始源文件 ( .ts)。这些文件中的映射定义采用 JSON 格式。

这些由您的编辑器/IDE 使用。您将能够使用“转到定义”和“重命名”等编辑器功能来跨子项目导航和编辑代码。这意味着,例如,如果您重命名一个子项目中的类型,则更改也将传播到其他子项目。


请注意,即使您不拆分项目,也可以使用这些选项。如果您想为.d.ts文件提供“转到定义”的编辑器功能,这将非常有用。如果您在.d.ts文件的声明上点击“转到定义” ,您将被带到源文件 ( .ts) 位置而不是.d.ts. 但是这些选项在拆分项目中确实很出色。

就是这样!希望有帮助。

如果您的项目包含超过 150 个左右的文件,建议使用Project References将其拆分为较小的子项目。