<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Use client-side callbacks like &quot;onAdd&quot; in typescript (solved)]]></title><description><![CDATA[<p>Hello,</p>
<p>is it possible, to use client-side callbacks like &quot;onAdd&quot; in typescript?</p>
<p>In the documentation is no example for typescript: <a href="https://docs.colyseus.io/colyseus/state/schema/#onadd-instance-key" rel="nofollow">https://docs.colyseus.io/colyseus/state/schema/#onadd-instance-key</a></p>
<p>I tried the following code on my client-side:</p>
<pre><code>import * as Colyseus from &quot;colyseus.js&quot;
var colyseusSDK = new Colyseus.Client(&quot;ws://localhost:2567&quot;);
colyseusSDK.joinOrCreate(&quot;my_room&quot;).then(function (room) {
    room.state.players.onAdd((player, sessionId) =&gt; {
    });
});
</code></pre>
<p>but I get <code>Property 'players' does not exist on type 'unknown'.</code> as error in my IDE.</p>
<p>On the server side I have the following implementations:</p>
<p>MyRoomState.ts</p>
<pre><code>import { Schema, MapSchema, type } from &quot;@colyseus/schema&quot;;

export class Player extends Schema {
  @type(&quot;number&quot;) x: number;
  @type(&quot;number&quot;) y: number;
  @type(&quot;number&quot;) z: number;
}

export class MyRoomState extends Schema {
  @type({ map: Player }) players = new MapSchema&lt;Player&gt;();
}

</code></pre>
<p>MyRoom.ts</p>
<pre><code>import { Room, Client } from &quot;colyseus&quot;;
import { MyRoomState, Player } from &quot;./schema/MyRoomState&quot;;

export class MyRoom extends Room&lt;MyRoomState&gt; {

  onCreate (options: any) {
    this.setState(new MyRoomState());

    this.onMessage(&quot;type&quot;, (client, message) =&gt; {
    });

  }

  onJoin (client: Client, options: any) {
    console.log(client.sessionId, &quot;joined!&quot;);

    const player = new Player();

    player.x = 1;
    player.y = 1;
    player.z = 1;

    this.state.players.set(client.sessionId, player);
  }

  onLeave (client: Client, consented: boolean) {
    console.log(client.sessionId, &quot;left!&quot;);
    this.state.players.delete(client.sessionId);
  }

  onDispose() {
    console.log(&quot;room&quot;, this.roomId, &quot;disposing...&quot;);
  }
}

</code></pre>
]]></description><link>http://discuss.colyseus.io/topic/694/use-client-side-callbacks-like-onadd-in-typescript-solved</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Apr 2026 17:02:50 GMT</lastBuildDate><atom:link href="http://discuss.colyseus.io/topic/694.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 27 Jul 2022 13:38:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Use client-side callbacks like &quot;onAdd&quot; in typescript (solved) on Tue, 02 Aug 2022 09:55:03 GMT]]></title><description><![CDATA[<p>Hello,</p>
<p>is it possible, to use client-side callbacks like &quot;onAdd&quot; in typescript?</p>
<p>In the documentation is no example for typescript: <a href="https://docs.colyseus.io/colyseus/state/schema/#onadd-instance-key" rel="nofollow">https://docs.colyseus.io/colyseus/state/schema/#onadd-instance-key</a></p>
<p>I tried the following code on my client-side:</p>
<pre><code>import * as Colyseus from &quot;colyseus.js&quot;
var colyseusSDK = new Colyseus.Client(&quot;ws://localhost:2567&quot;);
colyseusSDK.joinOrCreate(&quot;my_room&quot;).then(function (room) {
    room.state.players.onAdd((player, sessionId) =&gt; {
    });
});
</code></pre>
<p>but I get <code>Property 'players' does not exist on type 'unknown'.</code> as error in my IDE.</p>
<p>On the server side I have the following implementations:</p>
<p>MyRoomState.ts</p>
<pre><code>import { Schema, MapSchema, type } from &quot;@colyseus/schema&quot;;

export class Player extends Schema {
  @type(&quot;number&quot;) x: number;
  @type(&quot;number&quot;) y: number;
  @type(&quot;number&quot;) z: number;
}

export class MyRoomState extends Schema {
  @type({ map: Player }) players = new MapSchema&lt;Player&gt;();
}

</code></pre>
<p>MyRoom.ts</p>
<pre><code>import { Room, Client } from &quot;colyseus&quot;;
import { MyRoomState, Player } from &quot;./schema/MyRoomState&quot;;

export class MyRoom extends Room&lt;MyRoomState&gt; {

  onCreate (options: any) {
    this.setState(new MyRoomState());

    this.onMessage(&quot;type&quot;, (client, message) =&gt; {
    });

  }

  onJoin (client: Client, options: any) {
    console.log(client.sessionId, &quot;joined!&quot;);

    const player = new Player();

    player.x = 1;
    player.y = 1;
    player.z = 1;

    this.state.players.set(client.sessionId, player);
  }

  onLeave (client: Client, consented: boolean) {
    console.log(client.sessionId, &quot;left!&quot;);
    this.state.players.delete(client.sessionId);
  }

  onDispose() {
    console.log(&quot;room&quot;, this.roomId, &quot;disposing...&quot;);
  }
}

</code></pre>
]]></description><link>http://discuss.colyseus.io/post/2001</link><guid isPermaLink="true">http://discuss.colyseus.io/post/2001</guid><dc:creator><![CDATA[lars]]></dc:creator><pubDate>Tue, 02 Aug 2022 09:55:03 GMT</pubDate></item><item><title><![CDATA[Reply to Use client-side callbacks like &quot;onAdd&quot; in typescript (solved) on Invalid Date]]></title><description><![CDATA[<p>Hi there,<br />
I think when you joined into a room and get state instance, it doesn't mean you've got all the data in state. (maybe changed in the future versions) so when you joined in a room, first hook onChange() to state of the room, whenever you got the full data in state, go on listen to it with onAdd() etc.</p>
]]></description><link>http://discuss.colyseus.io/post/2004</link><guid isPermaLink="true">http://discuss.colyseus.io/post/2004</guid><dc:creator><![CDATA[COCO]]></dc:creator><pubDate>Invalid Date</pubDate></item></channel></rss>