Cześć,
Próbuję zaimplementować sobie w Typescript asynchroniczne RPC oparte o Websockety. Chcę mieć możliwość ustalania "protokołu" czyli pary klas żądanie - odpowiedź, i narzucić kompilatorowi pilnowanie typów takich par przy wysyłaniu żądania. Udało mi się to zakodzić w Javie, ale w Typescript mam problem.
W Javie wygląda to tak:
abstract class Request<T extends Response>{
int id;
}
abstract class Response{
int id;
}
class GetRoomList extends Request<RoomList>{
}
class RoomList extends Response {
String roomList;
}
public class Program {
<Req extends Request<Resp>, Resp extends Response>
void call( Req request, Consumer<Resp> listener ){
// (...)
}
public static void main(String[] args) {
new Program().call(
new GetRoomList(),
(rl)-> System.out.println( rl.roomList )
);
}
}
I jest tak jak tego oczekuję- Java domyśla się że argumentem listenera w metodzie "call" jest typ RoomList. Właśnie z tym w Typescript mam problem, wygląda to tak:
abstract class Request<T extends Response>{
id: number;
}
abstract class Response{
id: number;
}
class RoomList extends Response {
roomList: string;
}
class GetRoomList extends Request<RoomList>{
}
class Program {
call
<Req extends Request<Resp>, Resp extends Response>
( request: Req, listener: (r: Resp)=>void ): void {
// (...)
}
main( args: string[] ) {
new Program().call(
new GetRoomList(),
(rl) => console.log( rl.roomList )
);
}
}
ale Typescript w miejscu (rl) => console.log(rl.roomList) krzyczy że "[ts] Property 'roomList' does not exist on type 'Response'."
Pls halp