将 import 语句添加到 global.d.ts 会破坏类型和模块声明

Adding `import` statement to `global.d.ts` destroys type and module declarations

在我的 Next.js 网络项目中,我的 types/global.d.ts 是这样开始的:

declare module 'react-zeroconfig-components'

interface Product {
  ...
}

我正在使用 openapi-typescript 从我的 Swagger OpenAPI 定义生成类型,但是当我导入生成的 swagger.ts 文件时:

import { definitions } from 'types/swagger'

declare module 'react-zeroconfig-components'

interface Product {
  ...
}

…none global.d.ts 中的另一个 types/interfaces 不再工作:

Type error: Cannot find name 'Product'.

并且 declare module 停止工作:

Could not find a declaration file for module 'react-zeroconfig-components'

这里有什么问题?

使用import 使文件成为模块,不再是环境类型声明文件。要解决此问题,请使用奇异的导入函数语法:

type SomethingCool = import("types/swagger").definitions;

这是因为如果您导入某些内容并将鼠标悬停在上面:

import mod from "cool-module";

您可能会看到编辑器(至少 VSCode)显示 import("cool-module") 作为类型。

所以在这里我们将使用它来减少静态 import 关键字的使用。