扩充TypeScript模块

thi*_*ple 6 sinon typescript

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

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

  var Sinon: Sinon.SinonStatic;

  export = Sinon;
}
Run Code Online (Sandbox Code Playgroud)

我有一个definitions.d.ts我在我的项目中使用的任何自定义定义.这是我试图这样做的方式:

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

    interface SinonStub {
      returnsPromise(): SinonPromise;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但是编译器无法识别新returnsPromiseSinonStub界面,也不承认新的SinonPromise类型.

这个定义有什么问题?

Fra*_*Tan 1

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

我猜你是sinon通过安装的typings install sinon。如果你这样做的话,typings search sinon实际上有 2 个,一个来自npm,一个来自dt。默认安装定义npmdt定义如下:

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

declare var sinon: Sinon.SinonStatic;

declare module "sinon" {
  export = sinon;
}
Run Code Online (Sandbox Code Playgroud)

还有一个sinon-stub-promisedt条目,它与上面的内容配合得很好:

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

  interface SinonStub {
    returnsPromise(): SinonPromise;
  }
}
Run Code Online (Sandbox Code Playgroud)

所以,这是解决方法:

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

现在可以成功编译:

/// <reference path="typings/index.d.ts" />

import * as sinon from 'sinon';

sinon.stub().returnsPromise();
Run Code Online (Sandbox Code Playgroud)