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

2024-03-15

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


通常,您只使用 .d.ts 文件作为非强类型的 JS 库的类型定义文件。这是关于 .d.ts 文件的另一个 SO:关于 TypeScript 中的“*.d.ts” https://stackoverflow.com/questions/21247278/about-d-ts-in-typescript。我们使用的解决方案是拥有一个包含您的类型的目录,并且似乎效果很好。是的,您必须导入文件中的类型,但它允许您明确地说明这一点,并且如果您使用“TypeScript Hero”插件,VS Code 可以自动为您添加导入。

另外,您可以将多种类型放入一个文件中,但我只会将功能分组在一起,例如飞机、汽车和船,以及它们是否足够小,例如文件vehicles.ts,或者您可以有四个文件:vehicles.ts, airplanes.ts, cars.ts and boats.ts,其中有泛型类型vehicles.ts以及其他文件中的具体内容。

现在,如果您从单个文件开始,vehicles.ts它开始随着一堆不同的类型而增长,并决定您想要将它们分解,一种无需重构任何内容即可实现的方法,但您的类型代码是创建一个名为 cars 的目录,然后将所有文件放入其中您重构,并以包含所有类型的导入和导出的 index.ts 文件结束。这是一个例子:

您的项目文件:

import { Boeing737, Boeing747, FordExplorer, BassBoat } from 'src/types/vehicle'

当前正在引用该目录中的 cars.ts 文件。现在,一旦我们进行了重构,现在有了目录:“src/types/vehicle”,其中包含重构的 .ts 文件,您可以创建一个index.ts文件看起来像这样:

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

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

如果您想了解有关 index.ts 文件及其工作原理的更多信息,请参阅以下 Typescript 文档:https://www.typescriptlang.org/docs/handbook/module-resolution.html https://www.typescriptlang.org/docs/handbook/module-resolution.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在打字稿中组织类型/接口声明? 的相关文章

随机推荐

  • 在node.js中使MySQL的ORDER BY动态化

    我想做ORDER BYNode js 中的 mysql 查询是动态的 但这不起作用 我console logmultiQuery 变量和一切看起来都很完美 但运行时它根本不起作用 这就是我所拥有的 var order multiQuery
  • Oracle SELECT - 双引号还是没有双引号? [复制]

    这个问题在这里已经有答案了 All 在为 Oracle 11i 数据库编写 SELECT 查询时 为什么 Oracle 中的某些表强制对所选字段应用引号 而其他表则不然 举个我最近遇到的例子 在 Aqua Data Studio 的查询分析
  • 如何在真实设备(移动设备)上开发Windows 10 UWP?

    我正在尝试在真实设备上调试我的应用程序 带有 Windows 10 Mobile 10 0 10581 0 的 lumia 830 开发者模式在两种设备 移动设备和 PC 上均处于开启状态 但是当我尝试在设备上模拟应用程序时 出现错误 DE
  • Rails ActionMailer 编码

    Setup Ruby 1 9 2 Rails 3 2 2 我的电子邮件编码遇到一些问题 注意 我对编码之类的东西不太熟悉 使用 ActionMailer 发送电子邮件时 电子邮件中的 html 出现了一些奇怪的情况 所有等号 都更改为 3D
  • 如何更改MySQL表的默认字符集?

    有一个MySQLtable这个定义取自SQLYog Enterprise Table Create Table etape prospection CREATE TABLE etape prospection etape prosp id
  • .h 是从 .h.in 生成的吗?

    我的库在构建后创建的 h 文件中有结构定义 但我在相应的 h in 中找不到这些定义 有人可以告诉我这一切是如何工作的以及它从哪里获取额外信息吗 具体来说 我正在构建 pth 用户空间线程库 它有 pth p h in 它不包含我正在寻找的
  • Pycharm-无法安装opencv

    我是 PyCharm 的新手 并尝试了解如何安装 openCV 包以及后来的 cv2 包 我在这里看到一个旧的讨论 建议首先从 internet 下载 openCV 然后更新系统解释器 我下载了 openCV 并将其放置在我管理项目的同一目
  • Fluentd 是否支持文件输出的日志轮换?

    我当前使用的设置是具有多个容器的 Docker 组合堆栈 这些容器将其日志记录信息发送到运行 Fluentd 守护进程的日志记录容器 在 compose 堆栈内 Fluentd 的配置包括一in forward收集日志并将其写入单独文件的源
  • 模拟/存根“super”调用

    我想模拟一下super调用 尤其是某些 ES6 类中的构造函数 例如 import Bar from bar class Foo extends Bar constructor opts super opts someFunc super
  • GitHub 上隐藏的 Markdown 文本

    GitHub 上有专门的 Markdown 语法来支持隐藏文本吗 我只是想把一些待办事项记在里面README md为了我自己 不让别人看到 EXTRAS 为了致敬 Tamas 的出色回答 以及人们多次提出的问题 下面是如何在 MD 文件中编
  • C++11 中缺少 std::u8string

    为什么 C 11 提供std u16string and std u32string并不是std u8string 我们需要实现utf 8编码还是使用额外的库 C 20 添加char8 t and std u8string http www
  • MySQL 8.0 升级后特定查询性能不佳

    编辑 我在 Python 中看到与 PHP 相同的行为 好像和MySQL有关 我们正在尝试从 MySQL 5 7 升级到 8 0 我们的代码库使用 PHP MySQLi 来查询 MySQL 服务器 在我们的测试设置中 我们发现绑定大量参数的
  • 添加推送通知时出现无效权利错误

    我正在尝试按照本教程向我的聊天应用程序添加推送通知 https www appcoda com firebase push notifications https www appcoda com firebase push notifica
  • 如何为动态创建的 QML 元素添加事件处理程序?

    我根据以下内容动态添加了一些 qml 组件到我的 gui 中这篇博文 http kunalmaemo blogspot kr 2011 04 creating qml element dynamically on html 如何为这些新创建
  • 如何在php中获取目录中的最新文件[重复]

    这个问题在这里已经有答案了 所以我有这个处理 CSV 文件的应用程序 我有一行代码来加载文件 myFile data FrontlineSMS Message Export 20120721 csv The name of the CSV
  • 有没有办法将开关与 String.contains("") 集成?

    我需要检查 String 对象是否包含 各种子字符串 并根据结果执行不同的代码片段 目前我有一系列的 else if 如果可能的话 我想将其转换为开关 有没有办法做到这一点 现在 if SomeString contains someSub
  • 编写 SQL 查询以删除 Woocommerce 中的旧订单

    我想删除 Woocommerce 中的一些旧订单数据 仅保留最近 12 个月的订单数据 这是我用来删除所有订单的 SQL 查询 DELETE FROM wp woocommerce order itemmeta DELETE FROM wp
  • Android - 相机功能指南

    我正在使用 SDK CameraPreview 中的示例以及此站点中的示例http marakana com forums android android examples 39 html http marakana com forums
  • 获取当前位置(GPS/WiFi)

    我正在尝试使用它来获取我的位置 如下所示 LocationManager myLocationManager LocationManager getSystemService Context LOCATION SERVICE Criteri
  • 如何在打字稿中组织类型/接口声明?

    我对打字稿有点陌生 让我有点困惑的事情之一是类型 接口声明 我正在编写一个库 当前有一些类和更多类型 接口声明 我在大部分代码中使用这些类型 接口 最初我会将它们保留在一个文件中types文件夹 然后我会在需要的地方导入它们 现在我有一个m