2016-08-04 21 views
6

Ich versuche, die Sinon Typdefinition für unser Projekt zu erweitern, ist hier, wie die Sinon.d.tsein Typoskript Modul augmentierenden

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

    var Sinon: Sinon.SinonStatic; 

    export = Sinon; 
} 

Ich habe ein definitions.d.ts, die ich in meinem Projekt für alle kundenspezifischen Definitionen verwenden. Hier ist, wie ich versuchte, es zu tun:

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

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

Aber der Compiler nicht die neuen returnsPromise in der SinonStub Schnittstelle erkennt, noch übernehmen sie den neuen SinonPromise Typen erkennen.

Was ist falsch an dieser Definition?

+0

ich das gleiche Problem haben, wenn die Definitionen zu schreiben für "sinon-as-promised" und "sinon-mongoose", wenn ich typings verwendet habe, um die npm-Definitionen zu erhalten. – stevehipwell

+0

N.B. Von Modulen (internen Modulen) wird in TypeScript abgeraten, sie empfehlen ES6-JavaScript-Module (externe Module oder nur Module) anstelle des alten namespace-basierten. Siehe https://www.typescriptlang.org/docs/handbook/modules.html und https://www.typescriptlang.org/docs/handbook/namespaces-and-modules.html –

+0

@JuanMendes das hilft nicht, ich habe nicht tu die typings für sinon, ich benutze sie und muss mit einigen benutzerdefinierten Funktionen erweitern. – vintem

Antwort

0

Ich glaube, dass Ihr Fall eine Problemumgehung erfordert. Die Definitionsdatei, die Sie haben, enthält keine export Typdefinitionen, so dass sie nicht außerhalb dieser Datei erweitert werden können.

Ich vermute, dass Sie sinon über typings install sinon installiert haben. Wenn Sie typings search sinon tun, gibt es tatsächlich 2, eine von npm und eine von dt. Der Standard installiert die npm Definitionen. Dies ist, was die dt definition wie folgt aussieht:

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

declare var sinon: Sinon.SinonStatic; 

declare module "sinon" { 
    export = sinon; 
} 

Es gibt auch einen dt Eintrag für sinon-stub-promise, die gut mit dem oben spielt:

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

    interface SinonStub { 
    returnsPromise(): SinonPromise; 
    } 
} 

Also, das ist die Abhilfe:

  1. Entfernen Sie die aktuelle sinon Eingabe.
  2. Installieren Sie die DefinitelyTyped Typisierungen für sinon:
  3. Installieren Sie die DefinitelyTyped Typisierungen für sinon-stub-promise: typings install sinon-stub-promise --source dt --global

Das jetzt erfolgreich kompiliert:

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

import * as sinon from 'sinon'; 

sinon.stub().returnsPromise();