From 26f80cc32f4117624d867a78e2f85aaaa4303aff Mon Sep 17 00:00:00 2001 From: David Matter Date: Mon, 16 Oct 2023 22:37:43 +0200 Subject: [PATCH 1/5] fix(types): allow type narrowing --- packages/vue-language-core/src/generators/script.ts | 8 +++++++- .../generic-interface-union/child.vue | 13 +++++++++++++ .../generic-interface-union/main.vue | 13 +++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 packages/vue-test-workspace/vue-tsc/non-strict-template/generic-interface-union/child.vue create mode 100644 packages/vue-test-workspace/vue-tsc/non-strict-template/generic-interface-union/main.vue diff --git a/packages/vue-language-core/src/generators/script.ts b/packages/vue-language-core/src/generators/script.ts index 8931666731..6c3e38001d 100644 --- a/packages/vue-language-core/src/generators/script.ts +++ b/packages/vue-language-core/src/generators/script.ts @@ -377,8 +377,14 @@ export function generate( ); //#endregion + codes.push( + `type OmitKeepDiscriminatedUnion = T extends any`, + `? Pick> + : never`, + `;\n`, + ); codes.push('return {} as {\n'); - codes.push(`props: __VLS_Prettify> & typeof __VLS_fnPropsSlots & typeof __VLS_defaultProps,\n`); + codes.push(`props: __VLS_Prettify> & typeof __VLS_fnPropsSlots & typeof __VLS_defaultProps,\n`); codes.push(`expose(exposed: import('${vueCompilerOptions.lib}').ShallowUnwrapRef<${scriptSetupRanges.expose.define ? 'typeof __VLS_exposed' : '{}'}>): void,\n`); codes.push('attrs: any,\n'); codes.push('slots: ReturnType,\n'); diff --git a/packages/vue-test-workspace/vue-tsc/non-strict-template/generic-interface-union/child.vue b/packages/vue-test-workspace/vue-tsc/non-strict-template/generic-interface-union/child.vue new file mode 100644 index 0000000000..d8aca33589 --- /dev/null +++ b/packages/vue-test-workspace/vue-tsc/non-strict-template/generic-interface-union/child.vue @@ -0,0 +1,13 @@ + diff --git a/packages/vue-test-workspace/vue-tsc/non-strict-template/generic-interface-union/main.vue b/packages/vue-test-workspace/vue-tsc/non-strict-template/generic-interface-union/main.vue new file mode 100644 index 0000000000..9d03f3cf0f --- /dev/null +++ b/packages/vue-test-workspace/vue-tsc/non-strict-template/generic-interface-union/main.vue @@ -0,0 +1,13 @@ + + + From d5ccb1b36ddce2bdd3d352e819d3ad0d06992f9c Mon Sep 17 00:00:00 2001 From: David Matter Date: Mon, 16 Oct 2023 23:21:24 +0200 Subject: [PATCH 2/5] move type definition to global types --- packages/vue-language-core/src/generators/script.ts | 8 +------- packages/vue-language-core/src/utils/globalTypes.ts | 5 +++++ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/vue-language-core/src/generators/script.ts b/packages/vue-language-core/src/generators/script.ts index 6c3e38001d..721ebed45c 100644 --- a/packages/vue-language-core/src/generators/script.ts +++ b/packages/vue-language-core/src/generators/script.ts @@ -377,14 +377,8 @@ export function generate( ); //#endregion - codes.push( - `type OmitKeepDiscriminatedUnion = T extends any`, - `? Pick> - : never`, - `;\n`, - ); codes.push('return {} as {\n'); - codes.push(`props: __VLS_Prettify> & typeof __VLS_fnPropsSlots & typeof __VLS_defaultProps,\n`); + codes.push(`props: __VLS_Prettify<__VLS_OmitKeepDiscriminatedUnion> & typeof __VLS_fnPropsSlots & typeof __VLS_defaultProps,\n`); codes.push(`expose(exposed: import('${vueCompilerOptions.lib}').ShallowUnwrapRef<${scriptSetupRanges.expose.define ? 'typeof __VLS_exposed' : '{}'}>): void,\n`); codes.push('attrs: any,\n'); codes.push('slots: ReturnType,\n'); diff --git a/packages/vue-language-core/src/utils/globalTypes.ts b/packages/vue-language-core/src/utils/globalTypes.ts index af10b93cbd..93b29a66a9 100644 --- a/packages/vue-language-core/src/utils/globalTypes.ts +++ b/packages/vue-language-core/src/utils/globalTypes.ts @@ -15,6 +15,11 @@ type __VLS_PickNotAny = __VLS_IsAny extends true ? B : A; type __VLS_Prettify = { [K in keyof T]: T[K]; } & {}; +type __VLS_OmitKeepDiscriminatedUnion = + T extends any + ? Pick> + : never; + type __VLS_GlobalComponents = __VLS_PickNotAny & __VLS_PickNotAny From 6d71ba18d7385691f21481a6c46d2baeaa81b1f9 Mon Sep 17 00:00:00 2001 From: David Matter Date: Mon, 16 Oct 2023 23:23:58 +0200 Subject: [PATCH 3/5] tabs --- packages/vue-language-core/src/utils/globalTypes.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vue-language-core/src/utils/globalTypes.ts b/packages/vue-language-core/src/utils/globalTypes.ts index 93b29a66a9..df049fca19 100644 --- a/packages/vue-language-core/src/utils/globalTypes.ts +++ b/packages/vue-language-core/src/utils/globalTypes.ts @@ -17,8 +17,8 @@ type __VLS_Prettify = { [K in keyof T]: T[K]; } & {}; type __VLS_OmitKeepDiscriminatedUnion = T extends any - ? Pick> - : never; + ? Pick> + : never; type __VLS_GlobalComponents = __VLS_PickNotAny From 3c9fbf5b7208f5c6c12724e3fc4da5a8e4db3585 Mon Sep 17 00:00:00 2001 From: David Matter Date: Mon, 16 Oct 2023 23:32:17 +0200 Subject: [PATCH 4/5] formatting --- .../generic-interface-union/child.vue | 14 ++++++++------ .../generic-interface-union/main.vue | 10 +++++----- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/packages/vue-test-workspace/vue-tsc/non-strict-template/generic-interface-union/child.vue b/packages/vue-test-workspace/vue-tsc/non-strict-template/generic-interface-union/child.vue index d8aca33589..1b85fedba0 100644 --- a/packages/vue-test-workspace/vue-tsc/non-strict-template/generic-interface-union/child.vue +++ b/packages/vue-test-workspace/vue-tsc/non-strict-template/generic-interface-union/child.vue @@ -1,13 +1,15 @@ diff --git a/packages/vue-test-workspace/vue-tsc/non-strict-template/generic-interface-union/main.vue b/packages/vue-test-workspace/vue-tsc/non-strict-template/generic-interface-union/main.vue index 9d03f3cf0f..c02e91579d 100644 --- a/packages/vue-test-workspace/vue-tsc/non-strict-template/generic-interface-union/main.vue +++ b/packages/vue-test-workspace/vue-tsc/non-strict-template/generic-interface-union/main.vue @@ -1,13 +1,13 @@ From f883629f91d1a34aa7a894b00d6ad4aad30156e1 Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Mon, 23 Oct 2023 03:14:05 +0800 Subject: [PATCH 5/5] chore: move test files --- .../{generic-interface-union => #3672}/child.vue | 0 .../{generic-interface-union => #3672}/main.vue | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename packages/vue-test-workspace/vue-tsc/non-strict-template/{generic-interface-union => #3672}/child.vue (100%) rename packages/vue-test-workspace/vue-tsc/non-strict-template/{generic-interface-union => #3672}/main.vue (100%) diff --git a/packages/vue-test-workspace/vue-tsc/non-strict-template/generic-interface-union/child.vue b/packages/vue-test-workspace/vue-tsc/non-strict-template/#3672/child.vue similarity index 100% rename from packages/vue-test-workspace/vue-tsc/non-strict-template/generic-interface-union/child.vue rename to packages/vue-test-workspace/vue-tsc/non-strict-template/#3672/child.vue diff --git a/packages/vue-test-workspace/vue-tsc/non-strict-template/generic-interface-union/main.vue b/packages/vue-test-workspace/vue-tsc/non-strict-template/#3672/main.vue similarity index 100% rename from packages/vue-test-workspace/vue-tsc/non-strict-template/generic-interface-union/main.vue rename to packages/vue-test-workspace/vue-tsc/non-strict-template/#3672/main.vue