如何使用Typescript将Expect()添加到全局名称空间?

时间:2020-04-07 18:09:22

标签: typescript

通过下面的代码,我可以使短毛猫将global.expect识别为变量

// types.d.ts
namespace NodeJS {
  interface Global {
    expect: any
  }
}

但是,它不会自动完成任何expect()方法。我认为是any

我正在尝试将其键入为预期的导入类型,但是它不起作用,这是我尝试过的方法。

import expectExport from 'expect';

namespace NodeJS {
  interface Global {
    expect: expectExport
  }
}

我想念什么?

2 个答案:

答案 0 :(得分:1)

TL; DR

global-expect.ts中执行以下操作:

import expectExports from "expect";

declare global {
    namespace NodeJS {
        interface Global {
            expect: typeof expectExports;
        }
    }
}

global.expect = expectExports;

确保在应用程序入口点的某个位置导入/执行文件,例如index.ts

import "./global-expect";

然后您可以在任何地方使用它:

global.expect(...); // (property) NodeJS.Global.expect: <...>(actual: ...) => Matchers<...>

说明

  1. NodeJS命名空间在global范围内,因此必须在模块内部以这种方式声明:
    declare global {
      namespace NodeJS {
        ...
      }
    }
    
  2. expect界面中的
  3. 类型 Global属性必须是 type "expect"导出中的>,而不是其实例。因此,必须这样声明:
    expect: typeof expectExports;
    
  4. 然后您实际上必须设置属性:

    import expectExports from "expect";
    
    ...
    
    global.expect = expectExports;
    

答案 1 :(得分:0)

一种简单的实现方法是在某些d.ts文件中增加NodeJS命名空间

declare namespace NodeJS {
    interface Global {
        expect: typeof import("expect")
    }
}

将Expect用作全局变量也很方便,因此您可以在global.d.ts附近制作一个tsconfig.json文件,并在其中放置声明

// global.d.ts
declare const expect: typeof import("expect");