mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-08-19 22:09:27 +02:00
* [Test] Added `toHaveArenaTagMatcher` + fixed prior matchers * Fixed imports and stuff * Removed accidental test file addition * More improvements and minor fixes * More semantic changes * Shuffled a few funcs around * More fixups to strings * Added `toHavePositionalTag` matcher * Applied reviews and fixed my godawful penmanship * Fix vitest.d.ts * Fix imports in `vitest.d.ts` --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
28 lines
989 B
TypeScript
28 lines
989 B
TypeScript
import type { AtLeastOne, NonFunctionPropertiesRecursive as nonFunc } from "#types/type-helpers";
|
|
|
|
/**
|
|
* Helper type to admit an object containing the given properties
|
|
* _and_ at least 1 other non-function property.
|
|
* @example
|
|
* ```ts
|
|
* type foo = {
|
|
* qux: 1 | 2 | 3,
|
|
* bar: number,
|
|
* baz: string
|
|
* quux: () => void; // ignored!
|
|
* }
|
|
*
|
|
* type quxAndSomethingElse = OneOther<foo, "qux">
|
|
*
|
|
* const good1: quxAndSomethingElse = {qux: 1, bar: 3} // OK!
|
|
* const good2: quxAndSomethingElse = {qux: 2, baz: "4", bar: 12} // OK!
|
|
* const bad1: quxAndSomethingElse = {baz: "4", bar: 12} // Errors because `qux` is required
|
|
* const bad2: quxAndSomethingElse = {qux: 1} // Errors because at least 1 thing _other_ than `qux` is required
|
|
* ```
|
|
* @typeParam O - The object to source keys from
|
|
* @typeParam K - One or more of O's keys to render mandatory
|
|
*/
|
|
export type OneOther<O extends object, K extends keyof O> = AtLeastOne<Omit<nonFunc<O>, K>> & {
|
|
[key in K]: O[K];
|
|
};
|