扩充TypeScript模块

时间:2016-08-04 14:51:44

标签: typescript sinon

我正在尝试为我们的项目增加Sinon类型定义,这里是如何定义Sinon.d.ts

declare module 'sinon' {
  module Sinon {
    interface SinonStub extends SinonSpy {
      ...
    }
    interface SinonStatic { ... }
    ...
  }

  var Sinon: Sinon.SinonStatic;

  export = Sinon;
}

我有一个definitions.d.ts我在项目中用于任何自定义定义。以下是我尝试这样做的方法:

declare module 'sinon' {
  module Sinon {
    interface SinonPromise {
      resolves(value?: any): void;
      rejects(value?: any): void;
    }

    interface SinonStub {
      returnsPromise(): SinonPromise;
    }
  }
}

但编译器无法识别returnsPromise接口中的新SinonStub,也无法识别新的SinonPromise类型。

这个定义有什么问题?

1 个答案:

答案 0 :(得分:0)

我相信您的情况需要一种解决方法。您拥有的定义文件不会export任何类型定义,因此无法将其扩展到该文件之外。

我猜你是通过sinon安装了typings install sinon。如果您typings search sinon实际上有{1}来自npm,而来自dt。默认安装npm定义。这就是dt definition的样子:

declare namespace Sinon {
  // ...
  interface SinonStub extends SinonSpy {
    // ...
  }
  // ...
}

declare var sinon: Sinon.SinonStatic;

declare module "sinon" {
  export = sinon;
}

sinon-stub-promise还有一个dt条目,可以很好地与上述条目配合使用:

declare namespace Sinon {
  interface SinonPromise {
    resolves(value?: any): void;
    rejects(value?: any): void;
  }

  interface SinonStub {
    returnsPromise(): SinonPromise;
  }
}

所以,这是解决方法:

  1. 删除当前的sinon输入内容。
  2. 安装sinontypings install sinon --source dt --global
  3. 的DefinitelyTyped类型
  4. 安装sinon-stub-promisetypings install sinon-stub-promise --source dt --global
  5. 的DefinitelyTyped类型

    现在成功编译:

    /// <reference path="typings/index.d.ts" />
    
    import * as sinon from 'sinon';
    
    sinon.stub().returnsPromise();