Skip to content

Commit 35b8a4e

Browse files
committed
Improves type accuracy
1 parent b67526a commit 35b8a4e

File tree

1 file changed

+19
-14
lines changed

1 file changed

+19
-14
lines changed

src/system/serialize.ts

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,28 @@
11
import type { Uri } from 'vscode';
22
import { serializeJsonReplacer } from '@env/json';
3+
import type { Container } from '../container';
34
import type { Branded } from './brand';
45

5-
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
6-
export type Serialized<T> = T extends Function
6+
// prettier-ignore
7+
export type Serialized<T> =
8+
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
9+
T extends Function | Error | Container
710
? never
811
: T extends Date
9-
? number
10-
: T extends Uri
11-
? string
12-
: T extends Branded<infer U, any>
13-
? U
14-
: T extends any[]
15-
? Serialized<T[number]>[]
16-
: T extends object
17-
? {
18-
[K in keyof T]: T[K] extends Date ? number : Serialized<T[K]>;
19-
}
20-
: T;
12+
? number
13+
: T extends Uri | RegExp
14+
? string
15+
: T extends Map<infer K, infer V>
16+
? [Serialized<K>, Serialized<V>][]
17+
: T extends Set<infer U>
18+
? Serialized<U>[]
19+
: T extends Branded<infer U, any>
20+
? U
21+
: T extends any[]
22+
? Serialized<T[number]>[]
23+
: T extends object
24+
? { [K in keyof T]: T[K] extends Date ? number : Serialized<T[K]> }
25+
: T;
2126

2227
export function serialize<T extends object>(obj: T): Serialized<T>;
2328
export function serialize<T extends object>(obj: T | undefined): Serialized<T> | undefined;

0 commit comments

Comments
 (0)