Skip to content

Avoid calling hasOwnProperty in helpers #37016

@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
No fields configured for issues without a type.

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions