首页 > 解决方案 > 在自定义定义中引用全局声明的命名空间类型

问题描述

关于这个主题有一个过去的问题,但没有发布答案:

如何导入顶级元素是非导出命名空间的 Typescript 类型定义文件?

我想为 建立一个类型testdouble-jest,但其导出函数中的第二个参数是全局jest实例,它被声明@types/jest为顶级声明的命名空间:

declare namespace jest {
  mock(): something
  // ...
}

编辑:这里是类型:https ://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/jest/index.d.ts

如何在我的test-double.d.ts声明中引用这个全局对象?我的声明如下所示,但部分成功:

/// <reference types="jest" />
// do i actually need the above directive?

declare module "testdouble-jest" {
  import * as td from "testdouble"; // the testdouble stuff works
  export type TestdoubleJest = typeof td & {
    mock: typeof jest.mock;  // this actually appears to work
  };
  function setupTestdoubleJest(
    testdouble: typeof td,
    jest: typeof jest // this just resolves to any
  ): TestdoubleJest;

  export = setupTestdoubleJest;
}

如果有人知道如何做到这一点,我将不胜感激!

编辑 2: 有一些关于肯定类型的例子,人们要么增加了 'jest' 命名空间,要么使用它的成员(就像我做的那样jest.mock),但我找不到一个指的是实际的全局jest对象。

标签: typescripttypesnamespacesgloballibraries

解决方案


代替

/// <reference types="jest" />

/// <reference types="@types/jest" />

这个对我有用。


推荐阅读