Files
type-level-demo/07-type-mapping/main.ts
T

37 lines
527 B
TypeScript

enum OpCode {
PING,
HELLO,
MOVE,
}
type PingEvent = Record<string, never>;
type HelloEvent = {
name: string;
};
type MoveEvent = {
x: number;
y: number;
};
type OpArgsMapping = {
[OpCode.PING]: PingEvent;
[OpCode.HELLO]: HelloEvent;
[OpCode.MOVE]: MoveEvent;
};
class WebSocketClient {
public send<TOp extends OpCode, TArgs extends OpArgsMapping[TOp]>(
op: TOp,
args: TArgs,
) {
// ...
}
}
function main_ws() {
const client = new WebSocketClient();
client.send(OpCode.PING, {});
}