就d.ts
文件和名称空间而言,出现了一种奇怪的情况。
我有一些d.ts
文件,我在其中声明并合并了名为namespace
的{{1}}。
请参见下文如何声明和自动合并(跨多个文件):
file1.d.ts ----- file2.d.ts ----- file3.d.ts < / p>
PROJECT
可以从项目的每个文件中自动访问declare namespace PROJECT {
interface SOME_INTERFACE {
...
}
type SOME_TYPE = SOME_UNION_TYPE
// ETC
}
名称空间。示例:
SomeComponent.tsx
PROJECT
这是所有预期的行为。
当我决定声明另一个名称空间时,我的问题就开始了。
ADMIN_BLOGPOST.d.ts
const someVariable: PROJECT.SOME_INTERFACE = {
// ...
};
仅由于import type { ACTION_THUNK_GENERIC } from "@hooks/useReducerThunk";
declare namespace ADMIN_BLOGPOST {
// HERE I DECLARE MULTIPLE TYPES
// AND ONE OF THE TYPES USES THE `ACTION_THUNK_GENERIC` TYPE, WHICH IS BEING IMPORTED HERE
type ACTION_THUNK = ACTION_THUNK_GENERIC<ACTION,GET_STATE>
}
的顶级import type
,现在我的名称空间不再自动可用。
VSCode开始考虑将ACTION_THUNK_GENERIC
作为一个模块,并开始让我不得不ADMIN_BLOGPOST.d.ts
使用该命名空间,例如:
SomeComponent.tsx
import
请注意,如果我从import type { ADMIN_BLOGPOST } from "@src/types/ADMIN_BLOGPOST";
const someVariable: ADMIN_BLOGPOST.ACTION_THUNK
文件中删除了该顶级导入(导入ACTION_THUNK_GENERIC
的导入),那么我的ADMIN_BLOGPOST.d.ts
命名空间将变为可用,而无需{{1 }}首先。
但是我真的需要导入。因为我需要ADMIN_BLOGPOST
类型,所以我可以构建非泛型import
类型。
是否有其他方法可以使我的ACTION_THUNK_GENERIC
名称空间可用,而不必在使用前将其导入?即:如何在ACTION_THUNK
文件中ADMIN_BLOGPOST
而不将其转换为模块?
答案 0 :(得分:4)
使用declare global
在全局命名空间中工作,而与模块导入无关。例如:
import type { ACTION_THUNK_GENERIC } from "@hooks/useReducerThunk";
declare global {
declare namespace ADMIN_BLOGPOST {
type ACTION_THUNK = ACTION_THUNK_GENERIC<ACTION,GET_STATE>
}
}
或者,您可以使用动态导入:
declare namespace ADMIN_BLOGPOST {
type ACTION_THUNK = import("@hooks/useReducerThunk").ACTION_THUNK_GENERIC<ACTION,GET_STATE>
}