我最近将一个Node.js项目从ECMAScript 6兼容的JavaScript转换为TypeScript。我仍然不完全熟悉TypeScript和ES6之间的交互,特别是在命名空间和类型方面。
在我的项目中有一个名为“sql”的子文件夹,它导出了许多与该项目的MySQL数据库交互的函数。我想在一个“Sql.Models”命名空间中组织我的DB模型类型,这样它们就可以被引用,例如“Sql.Models.User”。我希望我的模型在一个或多个“.d.ts”文件中声明在“sql”文件夹内,但我无法弄清楚如何正确组织这些内容,以便在其他地方可以引用这些类型。显然,我不能require或import一个“.d.ts”文件;那不是一个有效的TypeScript操作。我该如何在另一个ES6兼容的TypeScript模块中使用在“.d.ts”文件中声明的类型“Sql.Models.User”?
在我的项目中有一个名为“sql”的子文件夹,它导出了许多与该项目的MySQL数据库交互的函数。我想在一个“Sql.Models”命名空间中组织我的DB模型类型,这样它们就可以被引用,例如“Sql.Models.User”。我希望我的模型在一个或多个“.d.ts”文件中声明在“sql”文件夹内,但我无法弄清楚如何正确组织这些内容,以便在其他地方可以引用这些类型。显然,我不能require或import一个“.d.ts”文件;那不是一个有效的TypeScript操作。我该如何在另一个ES6兼容的TypeScript模块中使用在“.d.ts”文件中声明的类型“Sql.Models.User”?
Sql
的另一个文件中访问Sql.Models
。也许我太过于考虑C#的工作方式,即多个文件可以参与命名空间。我希望一个类提供Sql
命名空间,并且是项目中其他文件需要要求的唯一文件。它将定义一些常见函数,例如query
。但我还想提供其他命名空间,例如上面描述的模型,所有这些都是Sql
命名空间的子节点。 - ArcanoxSql
的命名空间和另一个子命名空间名为Sql.Models
,是这样吗? - Shaun Luttinsql.ts
旁边放置一个models.ts
文件来导出模型接口,然后在sql.ts
中导入它们,并在该文件中将它们重新导出到其正确的命名空间内(import * as models from "./models"
,然后稍后export namespace Sql { export namespace Models { export type User = models.User; } }
)。虽然不太美观,但它可以实现我想要的最终结果。 - Arcanox