Angular 2、TypeScript、およびSignalRを使用して.NETコアプロジェクトをセットアップしました。私はDefinitelyTypedのjQueryとSignalRタイピングを作成し、使用しています。TypeScriptは、SignalRのグローバルに参照されるインターフェイス拡張を見つけることができません
いくつかの記事(このようなone)は、ハブサーバーとクライアントで利用可能なものを宣言するインターフェイスを介して、SignalRハブに強いタイピングを追加することを提案しています。
多くの調整の後、私は最終的にIDEを満足させました。インターフェイスと拡張機能を騒がすことなく検出します。しかし、私がビルドするときはいつでも、タイプスクリプトは名前 'IRoomHub'(私のハブインタフェース名)を見つけることができないと訴えます。ここで
が私のインターフェイスの宣言で、(グローバルにインストール)私のタイピングのためのsignalrフォルダ内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>;
}
私の使用量が私のscriptsフォルダにあります。
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ファイル:
私は、宣言名前空間と宣言モジュールでインターフェイスをエクスポートインターフェイスに変更しようとしましたが、コンパイラは常に一方向またはそれ以外の方法で問題を見つけています。また、$
も見つかりません。コード例に十分な情報がない場合は、私のコードはすべてhereです。
どこでもhubs.d.tsへの参照が表示されませんが、何かが見逃されている可能性があります。 –
申し訳ありませんが、最近私は物事をテストするために取り出しました。私はそれを含めるために投稿を編集します。 –
私もこれで苦労しています。しかし、イオン性2.あなたはこれを働かせましたか? – Mukus