我正在尝试为我们的项目扩充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接口(interface)中的新SinonStub,也无法识别新的SinonPromise类型。

这个定义有什么问题?

最佳答案

我相信您的案子需要解决方法。您拥有的定义文件不export任何类型定义,因此它们不能扩展到该文件之外。

我猜您是通过sinon安装了typings install sinon的。如果执行typings search sinon,则实际上有2个,一个来自npm,一个来自dt。默认安装npm定义。这是 dt definition的样子:

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

declare var sinon: Sinon.SinonStatic;

declare module "sinon" {
  export = sinon;
}

还有一个sinon-stub-promisedt条目,与上面的代码很好地配合:
declare namespace Sinon {
  interface SinonPromise {
    resolves(value?: any): void;
    rejects(value?: any): void;
  }

  interface SinonStub {
    returnsPromise(): SinonPromise;
  }
}

因此,这是解决方法:
  • 删除当前的sinon类型。
  • sinon安装DefinitelyTyped类型:typings install sinon --source dt --global
  • sinon-stub-promise安装DefinitelyTyped类型:typings install sinon-stub-promise --source dt --global

  • 现在可以成功编译:
    /// <reference path="typings/index.d.ts" />
    
    import * as sinon from 'sinon';
    
    sinon.stub().returnsPromise();
    

    关于typescript - 增强TypeScript模块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38770726/

    10-11 21:39