如何组织TypeScript接口

gev*_*vik 37 typescript

我想知道在typescript中组织接口定义的推荐方法是什么.在我的项目中,我有很多不同的课程.每个类都可以有一个配置界面.目前,我已将所有这些接口定义收集到一个文件中,Interfaces.ts并从不同位置引用该文件.

有没有更好的办法?

示例:https://github.com/blendsdk/blendjs/blob/devel/blend/src/common/Interfaces.ts

bas*_*rat 43

有没有更好的办法

打字稿团队使用一个名为types.ts:https://github.com/Microsoft/TypeScript/blob/master/src/compiler/types.ts

我做同样的在我的项目如http://alm.tools:https://github.com/alm-tools/alm/blob/master/src/common/types.ts

  • 谢谢,这真的很有帮助!我想,您是否将`types.ts`中的类型定义放入全局命名空间中,还是从每个使用其类型的文件中引用`types.ts`? (11认同)
  • “您是否从每个使用其类型的文件中引用types.ts?”总是喜欢引用。全球人永远不会扩展 (4认同)
  • 恕我直言@basarat,我强烈不同意以这种方式组织类型。当然,我们都可以使用 CTRL+F,但为什么不更精细地组织这些呢?只需为项目的每个功能或部分使用一个类型文件即可。每当我看到一个包含 700 多行代码的文件时,我都会为不得不经历所有这些代码的可怜的开发人员感到难过。 (4认同)
  • 这真的是组织类型的更好方法吗?具有所有类型的6000+行文件看起来不太容易维护,也许最好将其按组件拆分。 (2认同)

小智 13

我喜欢这样构建我的应用程序:

|-- app
    |-- components
    |-- directives
    |-- services
    |-- interfaces
        |-- <feature/component name>
            |-- <interface name>.interface.ts
Run Code Online (Sandbox Code Playgroud)

  • 这种方法确实很难扩展。更好的选择可以使用[托管方法](https://kentcdodds.com/blog/colocation)。为了帮助实现更易于维护的代码库,我们应该将类型/接口文件与实现它们的文件或文件组放在一起。 (10认同)
  • 我必须同意@CristianFlórez 的观点。我看到了几个样板 Node.js + TypeScript 项目布局,它们在顶层有一个“interfaces”目录。这看起来很尴尬。这次分离的目的是什么?我认为如果您定义了一个服务(例如“notifier.ts”),为什么不在该文件中定义接口或在其旁边定义它们(例如“notifier.interfaces.ts”)?当您执行此操作时,添加测试定义(例如“notifier.tests.ts”)? (3认同)

pou*_*uya 11

我的项目是这样构建的

src/
??? ts
    ??? enums
    ?   ??? app_enums.ts
    ?   ??? db_enums.ts
    ??? interfaces
    ?   ??? app_interfaces.ts
    ?   ??? db_interfaces.ts
    ?   ??? global_interfaces.ts
    ??? types
        ??? app_types.ts
Run Code Online (Sandbox Code Playgroud)

  • “interfaces”和“types”文件夹有什么区别? (4认同)
  • @lion_bash 目录名称很好地表达了它们的用途。`interfaces` 目录包含所有接口,类型目录包含您在项目中使用的所有类型别名。如果您愿意,可以合并这些目录,但我发现在管理大型代码库时,在语义和结构上分割类型确实很有帮助。尝试找出最适合您的方法。项目目录结构没有黄金法则 (3认同)