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