在自定义定义中引用全局声明的名称空间类型

时间:2019-05-03 00:26:13

标签: typescript types namespaces global libraries

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

How do you import a Typescript type definition file whose top level element is a non-exported namespace?

我想为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:有一些关于DefinitelyTyped的人的例子,它们要么增加了'jest'名称空间,要么使用了它的成员(就像我对jest.mock所做的那样),但是我找不到一个指向实际的全局{ {1}}个对象。

1 个答案:

答案 0 :(得分:0)

替换

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

使用

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

对我有用。