diff --git a/src/lualib/ObjectGetOwnPropertyDescriptors.ts b/src/lualib/ObjectGetOwnPropertyDescriptors.ts index 9adc0071e..04aee8b51 100644 --- a/src/lualib/ObjectGetOwnPropertyDescriptors.ts +++ b/src/lualib/ObjectGetOwnPropertyDescriptors.ts @@ -1,5 +1,5 @@ function __TS__ObjectGetOwnPropertyDescriptors(this: void, object: any): Record { const metatable = getmetatable(object); if (!metatable) return {}; - return rawget(metatable, "_descriptors"); + return rawget(metatable, "_descriptors") || {}; } diff --git a/test/unit/builtins/object.spec.ts b/test/unit/builtins/object.spec.ts index cc7e380d6..c6c89a8a8 100644 --- a/test/unit/builtins/object.spec.ts +++ b/test/unit/builtins/object.spec.ts @@ -211,3 +211,27 @@ describe("Object.getOwnPropertyDescriptors", () => { `.expectToMatchJsResult(); }); }); + +describe("delete from object", () => { + test("delete from object", () => { + util.testFunction` + const obj = { foo: "bar", bar: "baz" }; + delete obj["foo"]; + return obj; + ` + .setTsHeader("declare function setmetatable(this: void, table: T, metatable: any): T;") + .expectToEqual({ bar: "baz" }); + }); + + // https://github.com/TypeScriptToLua/TypeScriptToLua/issues/993 + test("delete from object with metatable", () => { + util.testFunction` + const obj = { foo: "bar", bar: "baz" }; + setmetatable(obj, {}); + delete obj["foo"]; + return obj; + ` + .setTsHeader("declare function setmetatable(this: void, table: T, metatable: any): T;") + .expectToEqual({ bar: "baz" }); + }); +});