TypeScript类型定义的最佳实践

25

我已经阅读了数十页内容,试图找出在TypeScript中设置我的类型定义的最佳方法。

  • 我曾经在我的项目中的某个地方有一个typings.ts文件,然后通过以下方式在每个文件中导入所需的类型:

import {IMyCustomType} from './typings';

然后在我的类型文件中声明这些类型:

export interface IMyCustomType {...}

他们用declare interface IMyCustomType {..}代替export interface IMyCustomType {..}

对我来说,这种设置有一个很大的优点:我不需要在每个文件中显式导入类型,接口直接在整个项目中可用。

问题:

1)所有**/ * .d.ts文件都将在编译期间自动导入是否正确?

2)使用declare并使所有类型在整个项目中可用是一个好习惯吗?

3)是否有标准的目录路径和名称可以放置我的类型定义?

基本上,我正在尝试使我的全局接口在项目中自动可用,而无需显式导入它们。我应该这样做吗?如何设置项目以实现此目的?

更新

在与我的团队讨论后,大多数人反对使用环境类型,因此我们决定在需要时导入类型。为了使这更容易,我们依赖于我们的IDE自动导入所需的类型。


你能详细阐述一下你们团队决定不使用环境类型的原因吗? - manjunatha_d
1
我记不清确切的情况,因为这是几年前的事了,但四年后,我没有看到直接声明和导入类型会有任何问题。使用环境类型会污染全局空间并创建潜在的冲突。只有在声明模块或应用程序外声明的全局类型时才使用环境类型。 - klugjo
2个回答

1

2
你根本没有回答问题。OP并不是在问他是否应该使用 d.ts,而是在询问最佳实践来组织类型(目录位置/结构)并使用它们(环境声明 vs 导出)。 - Syffys

-2

你应该使用@types NPM范围。你可以在Typescript Handbook中找到更详细的指南,但基本上你需要做的就是运行一个NPM命令:

npm install --save @types/lodash

关于你的问题,基本上使用这种方法,你根本不需要担心类型定义文件,第三方库的存在对你来说是透明的(你不用关心它们放在哪里或如何导入它们,你只需要导入模块本身)。
关于使用declare,我认为那是一个单独的话题,但你可以查看这个问题:TypeScript中"declare class"和"interface"之间的区别是什么?

谢谢,但我的问题与库类型无关,而是与我的自定义接口和类型有关。基本上,我应该使我的类型环境(自动在任何地方可用)还是应该导入它们。 - klugjo
我更新了我的问题,并说明了我决定采取什么方案。 - klugjo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接