Skip to content

Commit a254afa

Browse files
committed
👍 Improve performance of isOptionalOf<T>
Before this commit, the benchmark result was is.OptionalOf 243.37 ns/iter 4,108,906.6 (234.5 ns … 271.25 ns) 245.73 ns 264.14 ns 267.17 ns is.OptionalOf (pre) 200.66 ns/iter 4,983,517.6 (195.82 ns … 232.95 ns) 202.55 ns 215.28 ns 222.94 ns And after this commit is.OptionalOf 45.56 ns/iter 21,948,235.7 (41.91 ns … 72.25 ns) 48.58 ns 53.75 ns 56.55 ns is.OptionalOf (pre) 12.86 ns/iter 77,733,516.2 (12.7 ns … 20.59 ns) 12.86 ns 14.23 ns 14.64 ns
1 parent 5330ea4 commit a254afa

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

is.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -390,9 +390,12 @@ export type OptionalPredicate<T> = Predicate<T | undefined> & {
390390
export function isOptionalOf<T>(
391391
pred: Predicate<T>,
392392
): OptionalPredicate<T> {
393-
return Object.assign(isOneOf([isUndefined, pred]), {
394-
optional: true as const,
395-
});
393+
return Object.assign(
394+
(x: unknown): x is Predicate<T | undefined> => isUndefined(x) || pred(x),
395+
{
396+
optional: true as const,
397+
},
398+
) as OptionalPredicate<T>;
396399
}
397400

398401
export default {

0 commit comments

Comments
 (0)