如何在使用`declare namespace`的`d.ts`文件中导入`ts`模块?
Posted
技术标签:
【中文标题】如何在使用`declare namespace`的`d.ts`文件中导入`ts`模块?【英文标题】:How to import `ts` modules in a `d.ts` file that uses `declare namespace`? 【发布时间】:2020-12-04 05:56:51 【问题描述】:我决定将整个项目所需的所有类型声明到一个 d.ts
文件中。
allTypes.d.ts
declare namespace PROJECT
interface MY_INTERFACE
// ...
仅通过声明该命名空间,我已经能够在我的所有项目文件中使用:
const something: PROJECT.MY_INTERFACE =
// ...
;
到目前为止,这一直有效。
但现在我需要声明一个基于现有 JS 对象的新类型。
@constants/COLLECTIONS.ts
export const COLLECTIONS =
PROP_A: "PROP_A",
PROP_B: "PROP_B",
PROP_C: "PROP_C",
;
所以我必须在我的 allTypes.d.ts
文件中执行以下操作。
allTypes.d.ts
import COLLECTIONS from "@constants/COLLECTIONS";
declare namespace PROJECT
interface MY_INTERFACE
// ...
type SOME_TYPE = keyof typeof COLLECTIONS // THIS IS WORKING FINE
问题是,仅仅通过在我的allTypes.d.ts
的顶层执行import
,我的PROJECT
命名空间对于我的项目文件不再可见。
我该如何解决这个问题?
【问题讨论】:
想知道您是否能够找到解决方法? 【参考方案1】:我对此进行了更多研究,这个解决方案适用于我的情况 https://***.com/a/51114250/40769
像下面的例子一样使用内联导入仍然允许使用脚本类型 .ts/.d.ts 文件。
declare namespace Express
interface Request
user: import("./user").User;
这个答案也有一些关于“脚本”和“模块” ts 文件之间区别的有用上下文:https://***.com/a/42257742/40769
【讨论】:
以上是关于如何在使用`declare namespace`的`d.ts`文件中导入`ts`模块?的主要内容,如果未能解决你的问题,请参考以下文章