UNPKG

1.28 kBPlain TextView Raw
1import type { IsAny, IsUnknown } from '../../src/tsHelpers'
2
3export function expectType<T>(t: T): T {
4 return t
5}
6
7type Equals<T, U> = IsAny<
8 T,
9 never,
10 IsAny<U, never, [T] extends [U] ? ([U] extends [T] ? any : never) : never>
11>
12export function expectExactType<T>(t: T) {
13 return <U extends Equals<T, U>>(u: U) => {}
14}
15
16type EnsureUnknown<T extends any> = IsUnknown<T, any, never>
17export function expectUnknown<T extends EnsureUnknown<T>>(t: T) {
18 return t
19}
20
21type EnsureAny<T extends any> = IsAny<T, any, never>
22export function expectExactAny<T extends EnsureAny<T>>(t: T) {
23 return t
24}
25
26type IsNotAny<T> = IsAny<T, never, any>
27export function expectNotAny<T extends IsNotAny<T>>(t: T): T {
28 return t
29}
30
31expectType<string>('5' as string)
32expectType<string>('5' as const)
33expectType<string>('5' as any)
34expectExactType('5' as const)('5' as const)
35// @ts-expect-error
36expectExactType('5' as string)('5' as const)
37// @ts-expect-error
38expectExactType('5' as any)('5' as const)
39expectUnknown('5' as unknown)
40// @ts-expect-error
41expectUnknown('5' as const)
42// @ts-expect-error
43expectUnknown('5' as any)
44expectExactAny('5' as any)
45// @ts-expect-error
46expectExactAny('5' as const)
47// @ts-expect-error
48expectExactAny('5' as unknown)