From: Evan You Date: Tue, 2 May 2023 13:35:28 +0000 (+0800) Subject: fix(types): retain compatibility for provide() usage with explicit type parameter X-Git-Tag: v3.3.0-beta.4~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=038cd830d5b34b47d7e7e1c61f0973d27cd8b915;p=thirdparty%2Fvuejs%2Fcore.git fix(types): retain compatibility for provide() usage with explicit type parameter --- diff --git a/packages/dts-test/inject.test-d.ts b/packages/dts-test/inject.test-d.ts index f0522f2545..e611f900de 100644 --- a/packages/dts-test/inject.test-d.ts +++ b/packages/dts-test/inject.test-d.ts @@ -1,6 +1,7 @@ import { provide, inject, ref, Ref, InjectionKey } from 'vue' import { expectType } from './utils' +// non-symbol keys provide('foo', 123) provide(123, 123) @@ -9,6 +10,8 @@ const key: InjectionKey = Symbol() provide(key, 1) // @ts-expect-error provide(key, 'foo') +// @ts-expect-error +provide(key, null) expectType(inject(key)) expectType(inject(key, 1)) @@ -27,3 +30,13 @@ 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' }) diff --git a/packages/runtime-core/src/apiInject.ts b/packages/runtime-core/src/apiInject.ts index 9b76591493..bbf925102d 100644 --- a/packages/runtime-core/src/apiInject.ts +++ b/packages/runtime-core/src/apiInject.ts @@ -6,9 +6,9 @@ import { warn } from './warning' export interface InjectionKey extends Symbol {} -export function provide>( - key: T | string | number, - value: T extends InjectionKey ? V : any +export function provide | string | number>( + key: K, + value: K extends InjectionKey ? V : T ) { if (!currentInstance) { if (__DEV__) {