如何为 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"
然而,这将生成损坏的代码,因为没有真正的运行时模块,这只是我声明哪些变量在全局范围内可用的一种方式。
我认为问题在于 import
和 export
将 d.ts
文件放入模块声明中。这就是为什么全球版本不起作用,但带有 import
的版本可以。
尝试使用 declare global
:
明确声明 xpto
为全局变量
import {Xpto} from 'xpto';
declare global {
declare const xpto: Xpto;
}
图像,我有一个带有定义文件的模块 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"
然而,这将生成损坏的代码,因为没有真正的运行时模块,这只是我声明哪些变量在全局范围内可用的一种方式。
我认为问题在于 import
和 export
将 d.ts
文件放入模块声明中。这就是为什么全球版本不起作用,但带有 import
的版本可以。
尝试使用 declare global
:
xpto
为全局变量
import {Xpto} from 'xpto';
declare global {
declare const xpto: Xpto;
}