Skip to content

Commit 564aa84

Browse files
KazariEXzhiyuanzmjjohnsoncodehk
authored
fix(language-core): prevent the generation of generics in JS (#4836)
Co-authored-by: zhiyuanzmj <[email protected]> Co-authored-by: Johnson Chu <[email protected]>
1 parent ae25b12 commit 564aa84

File tree

6 files changed

+45
-1
lines changed

6 files changed

+45
-1
lines changed

packages/language-core/lib/codegen/globalTypes.ts

+1
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ export function generateGlobalTypes(lib: string, target: number, strictTemplates
8787
'__ctx' extends keyof __VLS_PickNotAny<K, {}> ? K extends { __ctx?: infer Ctx } ? Ctx : never : any
8888
, T extends (props: any, ctx: infer Ctx) => any ? Ctx : any
8989
>>;
90+
type __VLS_UseTemplateRef<T> = Readonly<import('${lib}').ShallowRef<T | null>>;
9091
9192
function __VLS_getVForSourceType(source: number): [number, number, number][];
9293
function __VLS_getVForSourceType(source: string): [string, number, number][];

packages/language-core/lib/codegen/script/scriptSetup.ts

+20-1
Original file line numberDiff line numberDiff line change
@@ -211,8 +211,12 @@ function* generateSetupFunction(
211211
]);
212212
}
213213
}
214+
const isTs = options.lang !== 'js' && options.lang !== 'jsx';
214215
for (const { define } of scriptSetupRanges.templateRefs) {
215-
if (define?.arg) {
216+
if (!define?.arg) {
217+
continue;
218+
}
219+
if (isTs) {
216220
setupCodeModifies.push([
217221
[
218222
`<__VLS_TemplateResult['refs'][`,
@@ -223,6 +227,21 @@ function* generateSetupFunction(
223227
define.exp.end
224228
]);
225229
}
230+
else {
231+
setupCodeModifies.push([
232+
[`(`],
233+
define.start,
234+
define.start
235+
], [
236+
[
237+
` as __VLS_UseTemplateRef<__VLS_TemplateResult['refs'][`,
238+
generateSfcBlockSection(scriptSetup, define.arg.start, define.arg.end, codeFeatures.navigation),
239+
`]>)`
240+
],
241+
define.end,
242+
define.end
243+
]);
244+
}
226245
}
227246
setupCodeModifies = setupCodeModifies.sort((a, b) => a[1] - b[1]);
228247

test-workspace/tsc/passedFixtures/vue2/tsconfig.json

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
"../vue3/#4777",
2828
"../vue3/#4820",
2929
"../vue3/#4822",
30+
"../vue3/#4826",
3031
"../vue3/#4828",
3132
"../vue3/components",
3233
"../vue3/defineEmits",

test-workspace/tsc/passedFixtures/vue3.4/tsconfig.json

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"../vue3/#3820",
1313
"../vue3/#4777",
1414
"../vue3/#4820",
15+
"../vue3/#4826",
1516
"../vue3/#4828",
1617
"../vue3/rootEl",
1718
"../vue3/templateRef",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<script setup>
2+
import { useTemplateRef } from 'vue';
3+
4+
const a = useTemplateRef('a');
5+
defineExpose({ a });
6+
</script>
7+
8+
<template>
9+
<a ref="a" />
10+
</template>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<script setup lang="ts">
2+
import { useTemplateRef } from 'vue';
3+
import { exactType } from '../../shared';
4+
import Child from './child.vue';
5+
6+
const child = useTemplateRef('child');
7+
exactType(child.value?.a, {} as HTMLAnchorElement | null | undefined);
8+
</script>
9+
10+
<template>
11+
<Child ref="child" />
12+
</template>

0 commit comments

Comments
 (0)