2016-08-04 3 views
6

Я пытаюсь дополнить определение типа 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 типа.

Что не так с этим определением?

+0

У меня та же проблема при написании определений для «sinon-as-prom» и «sinon-mongoose», когда я использовал типизацию для определения npm. – stevehipwell

+0

N.B. Модули (внутренние модули) не приветствуются в TypeScript, они рекомендуют модули JavaScript ES6 (внешние модули или просто модули) вместо старого пространства имен, основанного на нем. См. Https://www.typescriptlang.org/docs/handbook/modules.html и https://www.typescriptlang.org/docs/handbook/namespaces-and-modules.html –

+0

@JuanMendes, который не помогает, я didn «Я создаю типизацию для синона, я использую их и нуждаюсь в дополнении с помощью некоторых пользовательских функций. – vintem

ответ

0

Я считаю, что вашему делу требуется обходное решение. У файла определения, который у вас есть, нет 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; 
} 

Существует также dt вход для sinon-stub-promise, который играет хорошо с вышесказанным:

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

    interface SinonStub { 
    returnsPromise(): SinonPromise; 
    } 
} 

Итак, это временное решение:

  1. Удалите текущую цифру sinon.
  2. Установите типизации DefinitelyTyped для sinon:
  3. Установите типизации DefinitelyTyped для sinon-stub-promise: typings install sinon-stub-promise --source dt --global

Это успешно компилирует:

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

import * as sinon from 'sinon'; 

sinon.stub().returnsPromise();