diff --git a/spec/unit/utils.spec.ts b/spec/unit/utils.spec.ts index 448bed0a5..13fffb93c 100644 --- a/spec/unit/utils.spec.ts +++ b/spec/unit/utils.spec.ts @@ -678,14 +678,14 @@ describe("utils", function () { describe("safeSet", () => { it("should set a value", () => { - const obj = {}; + const obj: Record = {}; safeSet(obj, "testProp", "test value"); expect(obj).toEqual({ testProp: "test value" }); }); it.each(["__proto__", "prototype", "constructor"])("should raise an error when setting »%s«", (prop) => { expect(() => { - safeSet({}, prop, "teset value"); + safeSet(>{}, prop, "teset value"); }).toThrow("Trying to modify prototype or constructor"); }); }); diff --git a/src/client.ts b/src/client.ts index 8e087c799..cb8df7ae4 100644 --- a/src/client.ts +++ b/src/client.ts @@ -38,7 +38,7 @@ import { Filter, IFilterDefinition, IRoomEventFilter } from "./filter"; import { CallEventHandlerEvent, CallEventHandler, CallEventHandlerEventHandlerMap } from "./webrtc/callEventHandler"; import { GroupCallEventHandlerEvent, GroupCallEventHandlerEventHandlerMap } from "./webrtc/groupCallEventHandler"; import * as utils from "./utils"; -import { replaceParam, QueryDict, sleep, noUnsafeEventProps } from "./utils"; +import { replaceParam, QueryDict, sleep, noUnsafeEventProps, safeSet } from "./utils"; import { Direction, EventTimeline } from "./models/event-timeline"; import { IActionsObject, PushProcessor } from "./pushprocessor"; import { AutoDiscovery, AutoDiscoveryAction } from "./autodiscovery"; @@ -8809,8 +8809,8 @@ export class MatrixClient extends TypedEventEmitter { diff --git a/src/utils.ts b/src/utils.ts index 0c3aea773..326f87c38 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -720,7 +720,7 @@ function processMapToObjectValue(value: any): any { * Recursively converts Maps to plain objects. * Also supports sub-lists of Maps. */ -export function recursiveMapToObject(map: Map): any { +export function recursiveMapToObject(map: Map): Record { const targetMap = new Map(); for (const [key, value] of map) { @@ -734,7 +734,7 @@ export function unsafeProp(prop: K): boolean { return prop === "__proto__" || prop === "prototype" || prop === "constructor"; } -export function safeSet(obj: Record, prop: K, value: any): void { +export function safeSet, K extends keyof O>(obj: O, prop: K, value: O[K]): void { if (unsafeProp(prop)) { throw new Error("Trying to modify prototype or constructor"); }