Skip to content

Avoid calling hasOwnProperty in helpers #37016

Closed
@ExE-Boss

Description

@ExE-Boss

TypeScript Version: master branch

Search Terms:

  • exports hasOwnProperty
  • helpers hasOwnProperty

Code

// @module: CommonJS
// @target: ES5
// @showEmit

// @filename: index.ts
import { assertArgs, assertObject } from "./types.js";
import { call } from "./func-util.js";

export const {
	hasOwnProperty,
	isPrototypeOf,
} = (({ hasOwnProperty, isPrototypeOf }) => {
	return {
		hasOwnProperty(target: object, property: PropertyKey) {
			assertArgs(arguments.length, 2);
			assertObject(target);
			return call(hasOwnProperty, target, property);
		},
		isPrototypeOf(proto: object, target: any) {
			assertArgs(arguments.length, 2);
			assertObject(proto);
			return call(isPrototypeOf, proto, target);
		},
	};
})(Object.prototype);
export * from "./func-util.js";

// @filename: func-util.d.ts
export function apply<T, A extends readonly unknown[], R>(
	target: (this: T, ...args: A) => R,
	thisArg: T,
	args: Readonly<A>
): R;
export function call<T, A extends readonly unknown[], R>(
	target: (this: T, ...args: A) => R,
	thisArg: T,
	...args: Readonly<A>
): R;

// @filename: types.d.ts
export function assertArgs(length: number, minLength: number): void;
export function assertObject(target: unknown): asserts target is object;

Workbench Repro

Expected behavior:

The above code works fine when transpiled.

Actual behavior:

The above code fails with an error at runtime when transpiled to non‑ESM.

Playground Link: 🔗

Related Issues:

Metadata

Metadata

Assignees

Labels

Has ReproThis issue has compiler-backed repros: https://aka.ms/ts-reprosNeeds InvestigationThis issue needs a team member to investigate its status.RescheduledThis issue was previously scheduled to an earlier milestone

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions