import { provide, inject, ref, Ref, InjectionKey } from 'vue' import { expectType } from './utils' // non-symbol keys provide('foo', 123) provide(123, 123) const key = Symbol() as InjectionKey provide(key, 1) // @ts-expect-error provide(key, 'foo') // @ts-expect-error provide(key, null) expectType(inject(key)) expectType(inject(key, 1)) expectType(inject(key, () => 1, true /* treatDefaultAsFactory */)) expectType<() => number>(inject('foo', () => 1)) expectType<() => number>(inject('foo', () => 1, false)) expectType(inject('foo', () => 1, true)) // #8201 type Cube = { size: number } const injectionKeyRef = Symbol('key') as InjectionKey> // @ts-expect-error provide(injectionKeyRef, ref({})) // naive-ui: explicit provide type parameter provide('cube', { size: 123 }) provide(123, { size: 123 }) provide(injectionKeyRef, { size: 123 }) // @ts-expect-error provide('cube', { size: 'foo' }) // @ts-expect-error provide(123, { size: 'foo' })