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

TypeScript 1.4 CommonJS modules exposed as constructors

This question 非常 接近我的问题,linked 问题中的评论真的很有帮助,但我似乎无法做出纯 "ghost" 模块。

我正在努力处理的代码可以 be found here 我有一个文件 "mariasql.d.ts" 和一个测试文件 "mariasql-tests.ts"。 *.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 ...

注意 - github link 将读取 c:Client.prototype 也不起作用。

我觉得我一定是误解了一些明显的东西。

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

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

您需要使用的接口:

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

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