【发布时间】:2020-02-15 23:45:47
【问题描述】:
如果我们启用允许我们在浏览器上调试的源映射。同样寻找declaration和declarationMap的用例。
我已经在互联网上搜索过,但是我的糟糕除了生成.d.ts文件之外找不到实际的用例。
【问题讨论】:
标签: typescript tsconfig
如果我们启用允许我们在浏览器上调试的源映射。同样寻找declaration和declarationMap的用例。
我已经在互联网上搜索过,但是我的糟糕除了生成.d.ts文件之外找不到实际的用例。
【问题讨论】:
标签: typescript tsconfig
生成.d.ts 文件正是declaration 编译器选项的用例,因此生成输出为.js,而所有类型定义仍可保留给使用您项目的其他TS 项目。
IDE 可以利用declarationMap 选项来提供更好的开发人员体验:当您当前打开了相应的.d.ts 文件并希望查看其实现时,它使您能够快速导航到原始源(另请参阅this answer)。
在 --declaration 旁边启用 --declarationMap 会导致编译器在输出 .d.ts 文件旁边发出 .d.ts.map 文件。语言服务现在也可以理解这些映射文件,并使用它们将基于声明文件的定义位置映射到其原始源(如果可用)。
换句话说,对使用 --declarationMap 生成的 .d.ts 文件中的声明点击 go-to-definition 会将您带到定义该声明的源文件 (.ts) 位置,而不是.d.ts.
【讨论】:
npm i faker。那时,我无法在我的 IDE 中找到类型定义。所以我添加了npm i @types/faker,它提供了一个 .d.ts 文件,以便在 IDE 中获得更好的开发人员体验。因此它只是为开发人员提供类型定义以及提供类型推断的 typescript 编译器。
随着您的应用程序的增长,Typescript 对您的代码进行类型检查和编译的时间会越来越长。对于大型代码库,缓慢的编译时间会严重减慢您的开发速度。为了克服这个问题,从 Typescript 3.0 开始,您可以使用 Project References 将您的大项目拆分为较小的子项目。 declaration 和 declarationMap 选项在这里发挥了重要作用。
declaration 选项启用 declaration 选项将导致 Typescript 编译器创建声明文件 (.d.ts)。 .d.ts 文件包含在相应的.ts 文件中使用的类型的声明。它们不包含类型的实现,它们只包含可公开访问的类型声明。
因此,任何人都可以在其他 Typescript 项目中使用您的 Typescript 项目中的类型。编译器可以借助您的 .d.ts 文件对其他项目中的代码进行类型检查,即使它们无权访问您的项目。
当您将一个大项目拆分为多个较小的多个子项目时,这会有所帮助。子项目可以访问彼此的声明文件。当您的一个子项目(比如 B)依赖于另一个子项目(比如 A)中声明的类型时,编译器使用子项目 A 中的 .d.ts 文件对子项目 B 进行类型检查和编译无需再次编译子项目A。这可以加快大型项目的编译时间。
declarationMap 选项启用declarationMap 选项时,Typescript 编译器会创建声明源映射 (.d.ts.map) 文件。声明源映射文件包含将.d.ts 文件中生成的每个类型声明链接回原始源文件 (.ts) 的映射定义。这些文件中的映射定义为 JSON 格式。
这些由您的编辑器/IDE 使用。您将能够使用“转到定义”和重命名等编辑器功能来导航和编辑跨子项目的代码。这意味着,例如,如果您在一个子项目中重命名一个类型,则更改也会传播到其他子项目。
请注意,即使您不拆分项目,也可以使用这些选项。如果您想为.d.ts 文件提供编辑器功能“转到定义”,这将非常有用。如果您在 .d.ts 文件的声明上点击“转到定义”,您将被带到源文件 (.ts) 位置,而不是 .d.ts 的位置。但这些选项在拆分项目中确实大放异彩。
就是这样!希望对您有所帮助。
如果您的项目包含超过 150 个文件左右,建议使用 Project References 将其拆分为较小的子项目。
【讨论】:
declarationMap 映射保留在已发布的 NPM 包中,还是在这种情况下它们没有用?