typescript TS出口申报与具有隔离模块的出口列表

3htmauhk  于 2023-02-20  发布在  TypeScript
关注(0)|答案(1)|浏览(244)

我的tsconfig.json"isolatedModules": true( typescript v4.8.4)
hanlder.ts文件中,如果我这样做,TS会警告我有关TS1205: Re-exporting a type when the '--isolatedModules' flag is provided requires using 'export type'.的信息

// handler.ts

interface Handler {
    handle(): Promise<void>;
}

export {
  Handler // This is not allowed
};

但如果我用出口报关单来代替,那么它就起作用了:

// handler.ts

export interface Handler { // This is fine
    handle(): Promise<void>;
}

有人知道TS为什么对这两种情况有不同的处理吗?

xmd2e60i

xmd2e60i1#

本例中的不同之处在于,设置isolatedModules标志会告诉TypeScript,如果您编写的某些代码无法由单个文件的蒸发过程正确解释,则会发出警告。有关详细信息,请参阅typescript tsconfig文档
import type只导入用于类型注解和声明的声明。它总是被完全擦除,因此在运行时没有残留。类似地,export type只提供可用于类型上下文的导出,并且也从TypeScript的输出中擦除。
值得注意的是类在运行时有一个值,在设计时有一个类型,并且使用是上下文相关的。当使用import类型导入类时,你不能做像extend这样的事情。
您可以通过将其定义为一个类型来解决此问题,因为这仅在Type only export and imports中描述的蒸腾时间下相关,也在TypeScript 3.8发行说明中进行了解释。

interface Handler {
  handle(): Promise<void>;
}

export type { Handler };

相关问题