作为构造函数公开的TypeScript 1.4 CommonJS模块

时间:2015-04-01 23:29:23

标签: constructor typescript commonjs

This question 非常接近我的问题,链接问题中的评论确实很有帮助,但我似乎无法制作一个纯粹的"幽灵"模块。

我遇到的代码可以be found here我有一个文件" mariasql.d.ts"和一个测试文件" mariasql-tests.ts&#34 ;。 * .d.ts文件公开了一个构造函数,它的工作原理如下:

var Client = require('mariasql),
c = new Client();

根据其他SO问题,* .d.ts文件导出如下:

module MARIASQL {
    //... edited for brevity
    export interface MariaClient {
        connect(config:ClientConfig):void;
        end():void;
        destroy():void;
        escape(query:string):string;
        query(q:string, placeHolders?:Dictionary, useArray?:boolean):MariaQuery;
        query(q:string, placeHolders?:Array<any>, useArray?:boolean):MariaQuery;
        query(q:string, useArray?:boolean):MariaQuery;
        prepare(query:string): MariaPreparedQuery;
        isMariaDB():boolean;
        on(signal:string, cb:MariaCallBackError): MariaClient;    // signal 'error'
        on(signal:string, cb:MariaCallBackObject): MariaClient;   // signal 'close'
        on(signal:string, cb:MariaCallBackVoid): MariaClient;     // signal 'connect'
        connected: boolean;
        threadId: string;
    }

    export interface Client {
        new ():MariaClient;
        ():MariaClient;
        prototype: MariaClient;
    }
}

declare module "mariasql" {
    var Client:MARIASQL.Client;
    export = Client;
}

测试文件中的导入代码如下所示:

/// <reference path="../node/node-0.10.d.ts" />
/// <reference path="./mariasql.d.ts" />

// Example 1 - SHOW DATABASES
import util = require('util');
import Client = require('mariasql');

var c:Client = new Client(),
    inspect = util.inspect;
// edited ...

note - github链接将显示c:Client.prototype,但也无效。

我觉得我必须误解一些明显的东西。

1 个答案:

答案 0 :(得分:2)

你拥有的一切都很好。唯一需要的小修复是在您的测试中而不是

var c:Client.prototype = new Client(),

您需要使用界面:

var c: MARIASQL.MariaClient = new Client(),

或者完全删除它,让编译器为你推断它;)。