如何在使用 `declare namespace` 的 `d.ts` 文件中导入 `ts` 模块?
How to import `ts` modules in a `d.ts` file that uses `declare namespace`?
我决定将项目中需要的所有类型声明到一个 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
名称空间就不再对我的项目文件可见。
我该如何解决这个问题?
我对此进行了更多研究,这个解决方案适用于我的情况
像下面的例子一样使用内联导入仍然允许使用脚本类型 .ts/.d.ts 文件。
declare namespace Express {
interface Request {
user: import("./user").User;
}
}
这个答案也有一些关于“脚本”和“模块”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
}
问题是,只要在我的 allTypes.d.ts
的顶层执行 import
,我的 PROJECT
名称空间就不再对我的项目文件可见。
我该如何解决这个问题?
我对此进行了更多研究,这个解决方案适用于我的情况
像下面的例子一样使用内联导入仍然允许使用脚本类型 .ts/.d.ts 文件。
declare namespace Express {
interface Request {
user: import("./user").User;
}
}
这个答案也有一些关于“脚本”和“模块”ts 文件之间区别的有用上下文: