如何为 ts-check 正确声明给定模块的打字稿全局类型?

How to properly declare a typescript global type of a given module for ts-check?

图像,我有一个带有定义文件的模块 Xpto:

// node_modules/@types/xpto.d.ts
export interface Vertx {
  createHttpServer(handler: () => void) : void;
}

并声明一个助手来跟踪我的全局变量:

// runtime.d.ts
import {Xpto} from 'xpto';

declare const xpto: Xpto;

最后在 JS 文件上我有:

/// <reference path="runtime.d.ts" />
// @ts-check

xpto.createHttpServer(function (req) { ... }); 

出于某种原因,我在 vscode 上收到错误消息:Cannot find name "xpto",但如果我导入类型:

就会工作
import {xpto} from "runtime"

然而,这将生成损坏的代码,因为没有真正的运行时模块,这只是我声明哪些变量在全局范围内可用的一种方式。

我认为问题在于 importexportd.ts 文件放入模块声明中。这就是为什么全球版本不起作用,但带有 import 的版本可以。

尝试使用 declare global:

明确声明 xpto 为全局变量
import {Xpto} from 'xpto';

declare global { 
    declare const xpto: Xpto;
}