typescript - 如何在使用`declare namespace`的`d.ts`文件中导入`ts`模块?
问题描述
我决定将整个项目所需的所有类型声明到一个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
}
问题是,仅通过在import
my 的顶层执行此操作allTypes.d.ts
,我的PROJECT
命名空间对于我的项目文件不再可见。
我该如何解决这个问题?
解决方案
我对此进行了更多研究,此解决方案适用于我的情况https://stackoverflow.com/a/51114250/40769
像下面的例子一样使用 import inline 仍然允许使用脚本类型.ts/ .d.ts 文件。
declare namespace Express {
interface Request {
user: import("./user").User;
}
}
这个答案也有一些关于“脚本”和“模块”ts文件之间区别的有用上下文: https ://stackoverflow.com/a/42257742/40769
推荐阅读
- c# - 使用 asp.net,如何获取 WebRequest 对象的状态?
- azure-powershell - ARM模板deploymentScript PowerShell try catch被忽略?
- javascript - 如何通过 post 将图像二进制文件发送到 API?节点
- c# - 如何读取整个二进制文件(不仅是第一个变量),包括字符串、长整数和整数
- git - 如何提交更改到子模块而不是其父模块?
- java - JPQL 查询 CASE WHEN 始终为假
- python - 而不是直接绘制,需要绘制平滑折线图python
- azure - Azure VNET 子网委派
- c# - How do I set up and use de4dot?
- redirect - WGET to follow redirections from one domain to other