deno_std icon indicating copy to clipboard operation
deno_std copied to clipboard

bug(collection): Inconsistent behavior between `pick` and `omit`

Open lambdalisue opened this issue 1 year ago • 0 comments

Describe the bug

Found on https://github.com/denoland/std/pull/5926#discussion_r1751285539

The code below throws a runtime error on o.foo() but type errors.

import { pick } from "jsr:@std/collections/pick";
import { omit } from "jsr:@std/collections/omit";

class A {
  constructor(public a: string, public b: string, public c: string) {}

  foo(): string {
    return "hello";
  }
}

const obj = new A("a", "b", "c");

const p = pick(obj, ["a", "c", "foo"]);
const o = omit(obj, ["b"]);

console.log(obj.foo());
console.log(p.foo());
console.log(o.foo());

Closely related to https://github.com/denoland/std/issues/5927

Steps to Reproduce

Expected behavior

While the code doesn't throw type error, we should keep non listed methods in omit (o.foo() should be available.)

Environment

  • OS: [e.g. Ubuntu 20.04, MacOS 11]
  • deno version:
  • std version:

lambdalisue avatar Sep 12 '24 08:09 lambdalisue