当前位置: 首页 > 知识库问答 >
问题:

如何在打字稿中组织我的类型/接口声明?

宋育
2023-03-14

我对打字稿有点陌生,让我有点困惑的一件事是类型/接口声明。我正在编写一个库,它目前有几个类和更多的类型/接口声明。我在大多数代码中使用这些类型/接口,最初我会将它们放在 types 文件夹中的单个文件中,然后我会将它们导入到需要的任何位置,现在我在 types 文件夹中有一个声明命名空间类型的 models.d.ts,在这个命名空间中我导出我在整个代码中使用的所有类型/接口。这种方法可以吗,或者是否有更好的方法来组织类型和接口定义?

共有1个答案

郎意
2023-03-14

通常,对于非强类型的JS库,只使用. d.ts文件作为类型定义文件。下面是另一个SO about .d.ts文件:关于TypeScript中的“*.d.ts”。拥有一个包含您的类型的目录是我们使用的解决方案,看起来效果不错。是的,你必须在文件中导入类型,但是它允许你明确地做这件事,如果你使用“TypeScript Hero”插件VS Code可以自动为你添加导入。

此外,您可以将多种类型放在一个文件中,但我只会使用组合在一起的功能来这样做,例如,如果您的飞机,汽车和船只,并且它们足够小,例如文件vehicles.ts,或者您可以有四个文件:vehicles.ts,airplanes.ts,cars.ts和boats.ts,其中您在 vehicle.ts中有泛型类型,在其他文件中具有特定类型。

现在,如果你从一个文件vehicles.ts开始,它开始随着一堆不同类型的增长而增长,并决定要把它们分开,一种方法是创建一个名为车辆的目录,然后把你重构的所有文件放在其中,最后是一个index.ts文件,其中包含所有类型的导入和导出。这里有一个例子:

您的项目文件:

< code >从“src/types/vehicle”导入{ Boeing737,Boeing747,FordExplorer,bass boat }

这当前引用的是该目录中的 vehicles.ts 文件。现在,一旦我们进行了重构,现在有了目录:“src/types/vehicle”,它下面有重构的.ts文件,你创建一个index.ts文件,如下所示:

export { Boeing737, Boeing747 } from './airplanes';
export { FordExplorer, ToyotaCorolla, ToyotaSienna } from './cars';
export { BassBoat, Yacht } from './boats';

现在你在项目文件中的导入一点也没有改变,但是它现在从子文件中获取它的类型。这样就可以在不改变项目文件的情况下进行进一步的重构,比如你想把轿车和SUV分开。如果您在所有文件中使用相同的类型,您只需要一个导入行,您可以将它复制到新文件中,或者根据需要导入它们。

如果您想了解更多有关索引的信息。ts文件及其工作方式,下面是Typescript文档:https://www.typescriptlang.org/docs/handbook/module-resolution.html.

 类似资料:
  • 我正在处理打字稿,并将一个函数传递给另一个函数。 如果我有一个传递到typescript中另一个函数的函数,我应该如何编写类型? 我尝试了,但似乎不起作用。

  • 我在AngularJS 1.X项目上使用Typescript。我出于不同的目的使用不同的Javascript库。为了对我的源代码进行单元测试,我想使用类型(= 接口)存根一些依赖项。我不想使用 ANY 类型,也不想为每个接口方法编写一个空方法。 我正在寻找一种方法来做这样的事情: 我现在的痛苦是,我要么使用< code>any并实现我的测试用例中调用的所有方法,要么实现接口并实现完整的接口。那太多

  • 我正在用打字稿重写我的React应用程序。我正在尝试将所有组件实现为功能组件。 Typescript允许我们利用类型别名和接口来定义对象的形状或函数签名。我已经讲过了类型和接口的区别。 我读过的几乎所有文章都通过使用接口定义了一个组件,而这个接口本可以使用类型别名。据我所知,interface和type alias对于React组件给出了相同的结果,那么为什么几乎在每个定义中都使用了interfa

  • 我继承了一个打字稿项目(有.ts),但我?似乎无法弄清楚如何在打字稿文件中创建一个全局变量并访问另一个。 我是打字稿的新手,所以请耐心等待。 我没有使用Angular-看到了这个链接打字稿-声明可选的全局变量 任何指针高度赞赏

  • 我的代码: 错误消息来自TypeScript(3.0)编译器: TS2322:类型“string[]”不可分配给类型“[string, string, string, string, string, string, string]”。“string[]”类型中缺少属性“0”。 如果我将字符串[]更改为只读数组 TS2322:“ReadonlyArray”类型不能分配给类型“[string,stri

  • 问题内容: React事件的正确类型是什么。最初,我只是为了简单起见而使用。现在,我正在尝试清理并避免完全使用。 所以像这样一个简单的形式: 我在这里使用什么类型作为事件类型? 似乎没有工作,因为我收到一个错误消息,并且不存在。 对于所有事件的更笼统的回答,我们将不胜感激。 谢谢 问题答案: 该SyntheticEvent接口是通用的: 并且是一般约束与的交集 。 另外,由于事件是由输入元素引起的