TypeScript无法找到SignalR的全局引用接口扩展

时间:2016-10-16 23:38:22

标签: angular typescript signalr asp.net-core-mvc

我使用Angular 2,TypeScript和SignalR设置了一个.NET Core项目。我创建并使用了DefinitelyTyped的jQuery和SignalR类型。

有几篇文章(比如one)建议我通过声明中心服务器和客户端上可用内容的接口为我的SignalR中心添加一些强类型。

经过大量调整后,我终于让IDE开心了:它可以毫不费力地检测接口和扩展。但是,每当我进行构建时,TypeScript都会抱怨它找不到名称“IRoomHub”(我的集线器接口名称)。

这是我的接口的声明,它保存在信号器文件夹中的hubs.d.ts文件中,用于我的打字(全局安装):

interface SignalR {
    roomHub: IRoomHub;
}

interface IRoomHub {
    client: IRoomHubClient;
    server: IRoomHubServer;
}

interface IRoomHubClient {
    initiateTimer: (startMinutes: number) => void;
}

interface IRoomHubServer {
    initiateTimer(roomId: number, startMinutes: number): Promise<void>;
}

我的用法是在我的脚本文件夹中:

import { Component, OnInit } from '@angular/core';
import { RoomService } from './room.service';
import { Room } from './room';

@Component({
    selector: 'rooms',
    template: `...`,
    providers: [RoomService]
})
export class AdministrationPage implements OnInit { 

    roomHub: IRoomHub;

    constructor(private roomService: RoomService) { }

    rooms: Room[];

    initialize(room: Room) {
        this.roomHub.server.initiateTimer(room.id, room.startMinutes);
    }

    getRooms(): void {
        this.roomService.getRooms().then(rooms => this.rooms = rooms);
    }

    ngOnInit(): void {
        this.getRooms();
        this.roomHub = $.connection.roomHub;
    }
}

我的tsConfig:

{
  "compilerOptions": {
    "noImplicitAny": false,
    "noEmitOnError": true,
    "removeComments": false,
    "sourceMap": true,
    "target": "es5",
    "outDir": "../wwwroot/scripts/app",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true
  },
  "exclude": [
    "node_modules",
    "wwwroot"
  ]
}

和我的输入index.d.ts文件:

/// <reference path="globals/core-js/index.d.ts" />
/// <reference path="globals/jasmine/index.d.ts" />
/// <reference path="globals/jquery/index.d.ts" />
/// <reference path="globals/node/index.d.ts" />
/// <reference path="globals/signalr/index.d.ts" />
/// <reference path="globals/signalr/hubs.d.ts" />

我尝试从界面更改为导出界面,将其包含在声明命名空间和声明模块中,但编译器始终无法以某种方式查找它。此外,它也找不到$。如果我的代码示例中没有足够的信息,我的代码全部可用here

1 个答案:

答案 0 :(得分:0)

确保 typings.json 文件中包含 jquery

  

“jquery”:“registry:dt / jquery”,

执行: typings install

希望它有所帮助。