2016-08-04 43 views
6

Tôi đang cố gắng để tăng cường cho định nghĩa kiểu Sinon cho dự án của chúng tôi, đây là cách Sinon.d.ts được định nghĩaTăng cường biện một Module nguyên cảo

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

    var Sinon: Sinon.SinonStatic; 

    export = Sinon; 
} 

Tôi có một definitions.d.ts mà tôi sử dụng trong dự án của tôi đối với bất kỳ định nghĩa tùy chỉnh. Đây là cách tôi đã cố gắng để làm điều đó:

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

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

Nhưng trình biên dịch không nhận ra mới returnsPromise trong giao diện SinonStub, cũng không nhận ra mới SinonPromise loại.

Có gì sai với định nghĩa đó?

+0

Tôi đã có cùng một vấn đề khi viết các định nghĩa cho 'sinon-as-promised' và 'sinon-mongoose' khi tôi sử dụng kiểu gõ để lấy định nghĩa npm. – stevehipwell

+0

N.B. Các mô-đun (mô đun nội bộ) không được khuyến khích trong TypeScript, chúng đề xuất các mô-đun JavaScript ES6 (các mô-đun bên ngoài hoặc chỉ các mô đun) thay vì các mô-đun dựa trên không gian tên cũ. Xem https://www.typescriptlang.org/docs/handbook/modules.html và https://www.typescriptlang.org/docs/handbook/namespaces-and-modules.html –

+0

@JuanMendes không có tác dụng, tôi đã không 't sản xuất các kiểu chữ cho sinon, tôi đang sử dụng chúng và cần phải tăng thêm một số chức năng tùy chỉnh. – vintem

Trả lời

0

Tôi tin rằng trường hợp của bạn yêu cầu giải pháp thay thế. Tệp định nghĩa mà bạn có không export bất kỳ định nghĩa kiểu nào, vì vậy chúng không thể được mở rộng ra bên ngoài tệp đó.

Tôi đoán rằng bạn đã cài đặt sinon qua typings install sinon. Nếu bạn thực hiện typings search sinon thì thực sự có 2, một từ số npm và một từ số dt. Cài đặt mặc định là các định nghĩa npm. Đây là những gì dt definition trông giống như:

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

declare var sinon: Sinon.SinonStatic; 

declare module "sinon" { 
    export = sinon; 
} 

Ngoài ra còn có một mục dt cho sinon-stub-promise, mà chơi độc đáo với phần trên:

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

    interface SinonStub { 
    returnsPromise(): SinonPromise; 
    } 
} 

Vì vậy, đây là cách giải quyết:

  1. Xóa số sinon nhập hiện tại.
  2. Cài đặt typings DefinitelyTyped cho sinon:
  3. Cài đặt typings DefinitelyTyped cho sinon-stub-promise: typings install sinon-stub-promise --source dt --global

này bây giờ thành công biên dịch:

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

import * as sinon from 'sinon'; 

sinon.stub().returnsPromise(); 
Các vấn đề liên quan