[英]typescript: using declaration files in a typescript project to expose types globally
我最近开始使用 typescript。我有一个 typescript 项目设置,其中有很多用 typescript 编写的 React 组件。这些 typescript 组件通常导出组件本身,为了方便开发,我提取了这个 typescript 组件所需的所有类型到一个单独的文件。 现在通常你必须在你的组件中导入这些类型才能使用它,但由于它很麻烦,团队中的一些人想出了一个想法,将这些包含类型的单独文件命名为types.d.ts
(或 whatever.d .ts)。 这使得类型在整个项目中全局可用,而无需在任何地方显式导入类型。
现在,我知道只有在我的 typescript 项目中使用 javascript 组件,并且我希望对该 javascript 组件进行类型检查时,才需要类型声明文件。 在这种情况下,我可以从外部获取类型声明文件(如 DefinitelyTyped),或者我可以创建一个本地声明文件。 这不是我在这里使用声明文件的目的。
但我想了解这种用法有什么问题?
注意:这个名为 d.ts 的单独文件并不真正遵循声明文件可能需要的任何特定指南。 这只是一些常规的接口声明
一些观察:
在.ts
文件(或d.ts
文件)中,如果没有顶级导出,它将被视为全局脚本(类似于它在 javascript 中的工作方式)并且脚本中的所有内容都将在全局可用。 在我的案例中,这就是类型在全球范围内公开的方式(同样,它不必是.d.ts
文件)
如果你有一个ts
文件和一个同名的d.ts
文件,编译器会忽略d.ts
文件,这就是为什么不能使用Component.d.ts
公开Component.tsx
类型的原因(你需要将d.ts
文件命名为其他名称)
当导入没有类型信息的外部模块时,typescript 建议添加一个带有declare module moduleName
的d.ts
文件,除此之外,您还可以只添加一个 regular.d.ts 文件,并在moduleName/index.d.ts
所以,回答我的问题:
公开应用程序中全局使用的所有类型可能并没有错,但是您必须处理任何命名空间/命名冲突。 在这种情况下,不需要使用d.ts
文件,此设置与.ts
文件一起工作也可以在全局范围内公开类型。 实现此目的的另一种方法是从各自的文件中导出类型并在需要时导入它们。
在此设置中,编译器可能出现的唯一问题是当.d.ts
文件的名称与.ts
文件相同时,在这种情况下, .ts
文件将覆盖并且.d.ts
中的类型将不可用全球范围内。
编译器从ts
文件生成声明文件,如果你需要发布你的类型,那是最需要的。 在我们的例子中,类型是内部的,我们实际上不需要生成声明。 正如所讨论的,我们的用法不依赖于文件是声明文件,它在.ts
文件中也能正常工作,我们不应该为此使用.d.ts
文件。 所以,不,不会有任何影响。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.