Skip to content
ts

// function isEqual <T extends object, K extends object>
// (
// obj1: T, 
// obj2: K, 
// fields: Array<Extract<keyof T, keyof K>>
// ): boolean {
//   return fields.every((field) => trim(obj1[field]) === trim(obj2[field]));
// }

export function isEqual<T extends object, K extends object>(obj1: T, obj2: K, fields: Array<Extract<keyof T, keyof K>>): boolean {
  return fields.every((field) => obj1[field] as any === obj2[field]);
}


isEqual({ a: 1 }, { a: 2, b: 1 }, ['']);


type Pick<T, K extends keyof T> = {
  [P in K]: T[P]
}

type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;

type Partial<T> = {
  [P in keyof T]?: T[P]
}

type Require<T> = {
  [P in keyof T]-?: T[P]
}

type Readonly<T> = {
  readonly [P in keyof T]: T[P];
};

type DeepPartial<T> = {
  [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
};


extends
keyof
in
readyonly
exclude
extract

在 MIT 许可下发布