export function inject<T>(
key: InjectionKey<T> | string,
defaultValue: T,
- treatDefaultAsFactory?: boolean
+ treatDefaultAsFactory?: false
+): T
+export function inject<T>(
+ key: InjectionKey<T> | string,
+ defaultValue: T | (() => T),
+ treatDefaultAsFactory: true
): T
export function inject(
key: InjectionKey<any> | string,
--- /dev/null
+import { provide, inject, InjectionKey, expectType } from './index'
+
+const key: InjectionKey<number> = Symbol()
+
+provide(key, 1)
+// @ts-expect-error
+provide(key, 'foo')
+
+expectType<number | undefined>(inject(key))
+expectType<number>(inject(key, 1))
+expectType<number>(inject(key, () => 1, true /* treatDefaultAsFactory */))
+
+expectType<() => number>(inject('foo', () => 1))
+expectType<() => number>(inject('foo', () => 1, false))
+expectType<number>(inject('foo', () => 1, true))