2016-08-04 81 views
6

我試圖增加興農類型定義爲我們的項目,這裏是如何的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; 
    } 
    } 
} 

但是編譯器不會在SinonStub界面識別新returnsPromise,也不承認新SinonPromise型。

那個定義有什麼問題?

+0

寫定義時,我已經得到了同樣的問題對於'sinon-as-promised'和'sinon-mongoose'來說,當我使用類型來獲得npm定義時。 – stevehipwell

+0

N.B.在TypeScript中不鼓勵模塊(內部模塊),他們推薦使用ES6 JavaScript模塊(外部模塊或只是模塊),而不是基於舊的名稱空間。請參閱https://www.typescriptlang.org/docs/handbook/modules.html和https://www.typescriptlang.org/docs/handbook/namespaces-and-modules.html –

+0

@JuanMendes,這沒有幫助,我didn不會產生類似於sinon的類型,我正在使用它們並需要增加一些自定義函數。 – vintem

回答

0

我相信你的情況需要一個解決方法。您擁有的定義文件不包含任何類型定義,因此它們不能在該文件之外擴展。

我猜你已經通過typings install sinon安裝了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; 
} 

還有一個dt條目sinon-stub-promise,其與上面很好地扮演:

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

    interface SinonStub { 
    returnsPromise(): SinonPromise; 
    } 
} 

所以,這是解決方法:

  1. 刪除當前的sinon打字。
  2. sinon安裝DefinitelyTyped分型:
  3. 安裝DefinitelyTyped分型爲sinon-stub-promisetypings install sinon-stub-promise --source dt --global

現在,這成功編譯:

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

import * as sinon from 'sinon'; 

sinon.stub().returnsPromise();