Fix isFunction typing
This commit is contained in:
parent
73d6fd7566
commit
5bea1bf9b4
3 changed files with 17 additions and 14 deletions
|
@ -10,7 +10,7 @@ import {
|
||||||
} from "features/feature";
|
} from "features/feature";
|
||||||
import { globalBus } from "game/events";
|
import { globalBus } from "game/events";
|
||||||
import type { Persistent, State } from "game/persistence";
|
import type { Persistent, State } from "game/persistence";
|
||||||
import { persistent, PersistentState } from "game/persistence";
|
import { persistent } from "game/persistence";
|
||||||
import type { Unsubscribe } from "nanoevents";
|
import type { Unsubscribe } from "nanoevents";
|
||||||
import { isFunction } from "util/common";
|
import { isFunction } from "util/common";
|
||||||
import type {
|
import type {
|
||||||
|
@ -336,7 +336,7 @@ export function createBoard<T extends BoardOptions>(
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getNodeProperty<T>(property: NodeComputable<T>, node: BoardNode): T {
|
export function getNodeProperty<T>(property: NodeComputable<T>, node: BoardNode): T {
|
||||||
return isFunction(property) ? property(node) : unref(property);
|
return isFunction<T, [BoardNode], Computable<T>>(property) ? property(node) : unref(property);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getUniqueNodeID(board: GenericBoard): number {
|
export function getUniqueNodeID(board: GenericBoard): number {
|
||||||
|
|
|
@ -12,9 +12,10 @@ export function camelToTitle(camel: string): string {
|
||||||
return title;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-types
|
export function isFunction<T, S extends ReadonlyArray<unknown>, R>(
|
||||||
export function isFunction(func: unknown): func is Function {
|
functionOrValue: ((...args: S) => T) | R
|
||||||
return typeof func === "function";
|
): functionOrValue is (...args: S) => T {
|
||||||
|
return typeof functionOrValue === "function";
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum Direction {
|
export enum Direction {
|
||||||
|
|
|
@ -13,13 +13,15 @@ describe("isFunction", () => {
|
||||||
test("Given function returns true", () => expect(isFunction(vi.fn())).toBe(true));
|
test("Given function returns true", () => expect(isFunction(vi.fn())).toBe(true));
|
||||||
|
|
||||||
// Go through all primitives and basic types
|
// Go through all primitives and basic types
|
||||||
test("Given a string returns false", () => expect(isFunction("test")).toBe(false));
|
test("Given a non-function returns false", () => {
|
||||||
test("Given a number returns false", () => expect(isFunction(10)).toBe(false));
|
expect(isFunction("test")).toBe(false);
|
||||||
test("Given a bigint returns false", () => expect(isFunction(BigInt(10))).toBe(false));
|
expect(isFunction(10)).toBe(false);
|
||||||
test("Given a boolean returns false", () => expect(isFunction(true)).toBe(false));
|
expect(isFunction(BigInt(10))).toBe(false);
|
||||||
test("Given undefined returns false", () => expect(isFunction(undefined)).toBe(false));
|
expect(isFunction(true)).toBe(false);
|
||||||
test("Given a symbol returns false", () => expect(isFunction(Symbol())).toBe(false));
|
expect(isFunction(undefined)).toBe(false);
|
||||||
test("Given null returns false", () => expect(isFunction(null)).toBe(false));
|
expect(isFunction(Symbol())).toBe(false);
|
||||||
test("Given object returns false", () => expect(isFunction({})).toBe(false));
|
expect(isFunction(null)).toBe(false);
|
||||||
test("Given array returns false", () => expect(isFunction([])).toBe(false));
|
expect(isFunction({})).toBe(false);
|
||||||
|
expect(isFunction([])).toBe(false);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue