TypeScript:“无法将命名空间用作类型”

and*_*ras 5 types module typescript

注意:我发现的所有其他问题都与 Angular 相关和/或具有与此完全不同的设置。


我有以下设置:

inner/action.ts:

export type MyAction = string;
Run Code Online (Sandbox Code Playgroud)

inner/functions.ts

import { MyAction } from "./action";

const identity = (action: MyAction): string => action;

export {
    identity
};
Run Code Online (Sandbox Code Playgroud)

inner/index.ts

import * as MyAction from "./functions";

export { MyAction };
export * from "./action";
Run Code Online (Sandbox Code Playgroud)

usage.ts

import { MyAction } from "./inner";

const action: MyAction = "";
//            ^___ error is here
Run Code Online (Sandbox Code Playgroud)

错误:无法使用命名空间“MyAction”作为类型

尽管 IntelliJ 提供了在代码中导航到该位置的功能。

为什么不允许在这两种情况下使用相同的名称,我该怎么做才能使它们都具有相同的名称?

Gid*_*Max 2

这里的问题在于inner/index.ts
这样做:

import * as MyAction from "./functions";

export { MyAction };
Run Code Online (Sandbox Code Playgroud)

您正在做的是导出一个名为 的命名空间MyAction,其中包括所有导出function.ts
这意味着导出的 MyAction 的值inner/index.ts

{
    identity: (action)=>action
}
Run Code Online (Sandbox Code Playgroud)

该值覆盖行中MyAction导出的值action.ts

export * from "./action";
Run Code Online (Sandbox Code Playgroud)

相反你需要做的是

export * from "./functions";
export * from "./action";
Run Code Online (Sandbox Code Playgroud)

这将导出两者identity并且MyAction没有任何重命名或命名空间