diff --git a/packages-private/dts-test/inject.test-d.ts b/packages-private/dts-test/inject.test-d.ts index e545ef623..8f5db7aeb 100644 --- a/packages-private/dts-test/inject.test-d.ts +++ b/packages-private/dts-test/inject.test-d.ts @@ -11,7 +11,11 @@ import { expectType } from './utils' // non-symbol keys provide('foo', 123) +// @ts-expect-error provide(123, 123) +// @ts-expect-error +provide(true, 123) +provide('true', 123) const key: InjectionKey = Symbol() @@ -41,7 +45,6 @@ provide(injectionKeyRef, ref({})) // naive-ui: explicit provide type parameter provide('cube', { size: 123 }) -provide(123, { size: 123 }) provide(injectionKeyRef, { size: 123 }) // @ts-expect-error diff --git a/packages/runtime-core/src/apiInject.ts b/packages/runtime-core/src/apiInject.ts index f05d7333d..6703e025a 100644 --- a/packages/runtime-core/src/apiInject.ts +++ b/packages/runtime-core/src/apiInject.ts @@ -8,10 +8,10 @@ interface InjectionConstraint {} export type InjectionKey = symbol & InjectionConstraint -export function provide | string | number>( - key: K, - value: K extends InjectionKey ? V : T, -): void { +export function provide< + T, + K extends InjectionKey | string = InjectionKey | string, +>(key: K, value: K extends InjectionKey ? V : T): void { if (!currentInstance) { if (__DEV__) { warn(`provide() can only be used inside setup().`)