Angular 5 + SignalR(DefinitelyTyped) - 找不到名字'$'

Ali*_*son 1 npm signalr typescript angular

我正在尝试在Angular 5应用程序中使用SignalR.

我从DefinitelyTyped安装了这些强类型:

npm install --save @types/jquery
npm install --save @types/signalr
Run Code Online (Sandbox Code Playgroud)

我的packages.json节目版本2.5.3中的打字稿.

现在我试图像这样使用它:

import { Injectable } from '@angular/core';

@Injectable()
export class SignalRService {

    constructor() {}

    public ConnectTo(url: string): void {

        var hubConnection = $.hubConnection();
        var hubProxy = hubConnection.createHubProxy('DashboardHub');
        hubProxy.on('Example', (e: any) => {
            console.log('worked');
        });

        hubConnection.start();
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨如下:

error TS2304: Cannot find name '$'.
Run Code Online (Sandbox Code Playgroud)

...即使intellisense可以找到$.hub:

显示intellisense的图像


如果我尝试添加declare var $ :any;到我的文件,它会编译,但我在浏览器的控制台中收到另一个错误:$.hubConnection is not a function.

我错过了什么吗?

Ger*_*tas 10

要在Angular中使用SignalR,您需要执行以下步骤:

使用npm安装jquery,signalr包:

npm install signalr
npm install jquery
Run Code Online (Sandbox Code Playgroud)

添加类型:

npm install --save @types/jquery 
npm install --save @types/signalr
Run Code Online (Sandbox Code Playgroud)

将脚本添加到angular-cli.json

"apps": [{
    "scripts": [
        "../node_modules/jquery/dist/jquery.min.js",
        "../node_modules/signalr/jquery.signalR.min.js"
    ],
}]
Run Code Online (Sandbox Code Playgroud)

在服务中你需要添加:

declare var $: any;
Run Code Online (Sandbox Code Playgroud)

简单的角度代码示例:

import { Injectable } from '@angular/core';

declare var $: any;
@Injectable()
export class SignalrService {
    private connection: any;
    private proxy: any;
    private ulr: any;

    constructor() {}

    public startConnection(): void {
        this.connection = $.hubConnection(this.url);
        this.proxy = this.connection.createHubProxy('ProcessingHub');

        this.connection.start().done((data: any) => {
            console.log('Connected to Processing Hub');
            this.sendMessage();
        }).catch((error: any) => {
            console.log('Hub error -> ' + error);
        });
    }

    public sendMessage(): void {
        this.proxy.invoke('SendMessage', 'test')
           .catch((error: any) => {
               console.log('SendMessage error -> ' + error); 
            });
    }
}
Run Code Online (Sandbox Code Playgroud)