submessage: Fix implicit use of any.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
Anders Kaseorg
2024-05-03 18:25:26 -07:00
committed by Tim Abbott
parent a53fe206ea
commit 819bccfec1
2 changed files with 10 additions and 9 deletions

View File

@@ -30,16 +30,11 @@ export type WidgetData = {
question: string; question: string;
}; };
export type InboundData = Record<string, unknown> & {type: string}; export type InboundData = unknown;
export type NewOptionOutboundData = {type: string; idx: number; option: string}; export type NewOptionOutboundData = {type: string; idx: number; option: string};
export type QuestionOutboundData = {type: string; question: string}; export type QuestionOutboundData = {type: string; question: string};
export type VoteOutboundData = {type: string; key: string; vote: number}; export type VoteOutboundData = {type: string; key: string; vote: number};
export type PollHandle = { export type PollHandle = {
// Add generic key property to allow string indexing on PollHandle type in `handle_event` method.
[key: string]: {
outbound: (arg: string) => InboundData | undefined;
inbound: (sender_id: number, data: InboundData) => void;
};
new_option: { new_option: {
outbound: (option: string) => NewOptionOutboundData; outbound: (option: string) => NewOptionOutboundData;
inbound: (sender_id: number | string, data: InboundData) => void; inbound: (sender_id: number | string, data: InboundData) => void;
@@ -294,8 +289,14 @@ export class PollData {
} }
handle_event(sender_id: number, data: InboundData): void { handle_event(sender_id: number, data: InboundData): void {
assert(
typeof data === "object" &&
data !== null &&
"type" in data &&
typeof data.type === "string",
);
const type = data.type; const type = data.type;
if (this.handle[type]) { if (type === "new_option" || type === "question" || type === "vote") {
this.handle[type].inbound(sender_id, data); this.handle[type].inbound(sender_id, data);
} else { } else {
this.report_error_function(`poll widget: unknown inbound type: ${type}`); this.report_error_function(`poll widget: unknown inbound type: ${type}`);

View File

@@ -79,7 +79,7 @@ export function get_message_events(message: Message): SubmessageEvents | undefin
message.submessages.sort((m1, m2) => m1.id - m2.id); message.submessages.sort((m1, m2) => m1.id - m2.id);
const events = message.submessages.map((obj) => ({ const events = message.submessages.map((obj): {sender_id: number; data: unknown} => ({
sender_id: obj.sender_id, sender_id: obj.sender_id,
data: JSON.parse(obj.content), data: JSON.parse(obj.content),
})); }));
@@ -186,7 +186,7 @@ export function handle_event(submsg: Submessage): void {
return; return;
} }
let data; let data: unknown;
try { try {
data = JSON.parse(submsg.content); data = JSON.parse(submsg.content);