导出TypeScript模块会导致接口无法被拾取

Ken*_*ith 3 signalr typescript

我一起使用TypeScript和SignalR,并且我正在尝试为生成的SignalR类定义静态类型.如果我做这样的事情,它的工作原理:

///<reference path="../Scripts/jquery-1.8.d.ts" />
///<reference path="../Scripts/signalr-1.0.d.ts" />

interface SignalR {
    roomHub: Service.RoomHub;
}

module Service {
        export var roomHub = $.connection.roomHub;
        export interface RoomHub { }
}
Run Code Online (Sandbox Code Playgroud)

当然$.connection是类型SignalR,它在文件"signalr-1.0.d.ts"中定义,并在上面的文件中扩展.

但是,我需要能够Service从其他文件引用该模块,因此我需要在模块和接口中添加"export"关键字,即:

///<reference path="../Scripts/jquery-1.8.d.ts" />
///<reference path="../Scripts/signalr-1.0.d.ts" />

export interface SignalR {
    roomHub: Service.RoomHub;
}

export module Service {
    // Error here: "The property 'roomHub' does not exist on type SignalR."
    export var roomHub = $.connection.roomHub;
    export interface RoomHub { }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,我得到一条红色的小波浪线$.connection.roomHub,并且编译器返回错误,"属性'roomHub'在SignalR类型上不存在."

我当然不了解TypeScript的所有内容,但这对我来说似乎并不合适.我遇到了编译器错误吗?或者有不同的方法来做到这一点?

Ken*_*ith 6

我找到了一个解决方法.我将接口拉出到一个单独的文件中:

// File: ISignalR.ts
interface SignalR {
    roomHub: RoomHub;
}

interface RoomHub {
}
Run Code Online (Sandbox Code Playgroud)

然后我在我的服务文件中引用了该文件

///<reference path="../Scripts/jquery-1.8.d.ts" />
///<reference path="../Scripts/signalr-1.0.d.ts" />
///<reference path="ISignalR.ts" />

export module Service {
    export var roomHub = $.connection.roomHub;
}
Run Code Online (Sandbox Code Playgroud)

这很有效,奇怪的是.我不确定这是一个编译器错误,还是我继续误解的东西,但它显然与一些与AMD模块支持相关的细微语义变化有关.我很想听到更多来自那些比我更好地理解TypeScript和/或RequireJS模块的人的解释.