From 5a2f5d59cffa36a99e6f2feab6b3ba7958b7362f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?= Date: Mon, 3 Apr 2023 16:49:16 +0800 Subject: [PATCH] feat(types/slots): support slot presence / props type checks via `defineSlots` macro and `slots` option (#7982) --- .../__snapshots__/compileScript.spec.ts.snap | 45 ++++++++++++ .../__tests__/compileScript.spec.ts | 39 +++++++++++ packages/compiler-sfc/src/compileScript.ts | 42 ++++++++++- packages/dts-test/defineComponent.test-d.tsx | 69 ++++++++++++++++++- .../dts-test/functionalComponent.test-d.tsx | 28 +++++++- packages/dts-test/setupHelpers.test-d.ts | 25 ++++++- .../runtime-core/src/apiDefineComponent.ts | 29 ++++++-- packages/runtime-core/src/apiSetupHelpers.ts | 20 ++++-- packages/runtime-core/src/component.ts | 33 ++++++--- packages/runtime-core/src/componentOptions.ts | 31 ++++++++- .../src/componentPublicInstance.ts | 10 ++- packages/runtime-core/src/componentSlots.ts | 26 ++++++- packages/runtime-core/src/h.ts | 8 ++- packages/runtime-core/src/index.ts | 3 +- .../types/scriptSetupHelpers.d.ts | 2 + packages/runtime-dom/src/apiCustomElement.ts | 9 ++- 16 files changed, 380 insertions(+), 39 deletions(-) diff --git a/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap b/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap index f59a7407c25..ee00977c131 100644 --- a/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap +++ b/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap @@ -1785,6 +1785,51 @@ return { props, emit } })" `; +exports[`SFC compile + `) + assertCode(content) + expect(content).toMatch(`const slots = _useSlots()`) + expect(content).not.toMatch('defineSlots') + }) + + test('w/o return value', () => { + const { content } = compile(` + + `) + assertCode(content) + expect(content).not.toMatch('defineSlots') + expect(content).not.toMatch(`_useSlots`) + }) + + test('w/o generic params', () => { + const { content } = compile(` + + `) + assertCode(content) + expect(content).toMatch(`const slots = _useSlots()`) + expect(content).not.toMatch('defineSlots') + }) + }) + test('runtime Enum', () => { const { content, bindings } = compile( `