Skip to content

Commit efa7153

Browse files
authored
fix(language-core): special treatment for number elements inside v-for (#3859)
1 parent 02af955 commit efa7153

File tree

2 files changed

+32
-9
lines changed

2 files changed

+32
-9
lines changed

packages/language-core/lib/generators/script.ts

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -211,19 +211,25 @@ const __VLS_intrinsicElements: __VLS_IntrinsicElements;
211211
function __VLS_getVForSourceType(source: number): [number, number, number][];
212212
function __VLS_getVForSourceType(source: string): [string, number, number][];
213213
function __VLS_getVForSourceType<T extends any[]>(source: T): [
214-
T[number], // item
215-
number, // key
216-
number, // index
214+
item: T[number],
215+
key: number,
216+
index: number,
217217
][];
218218
function __VLS_getVForSourceType<T extends { [Symbol.iterator](): Iterator<any> }>(source: T): [
219-
T extends { [Symbol.iterator](): Iterator<infer T1> } ? T1 : never, // item
220-
number, // key
221-
undefined, // index
219+
item: T extends { [Symbol.iterator](): Iterator<infer T1> } ? T1 : never,
220+
key: number,
221+
index: undefined,
222+
][];
223+
// #3845
224+
function __VLS_getVForSourceType<T extends number | { [Symbol.iterator](): Iterator<any> }>(source: T): [
225+
item: number | (Exclude<T, number> extends { [Symbol.iterator](): Iterator<infer T1> } ? T1 : never),
226+
key: number,
227+
index: undefined,
222228
][];
223229
function __VLS_getVForSourceType<T>(source: T): [
224-
T[keyof T], // item
225-
keyof T, // key
226-
number, // index
230+
item: T[keyof T],
231+
key: keyof T,
232+
index: number,
227233
][];
228234
229235
// @ts-ignore
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<script setup lang="ts">
2+
import { exactType } from '../../shared';
3+
4+
declare const list1: number | number[];
5+
declare const list2: string | number[];
6+
declare const list3: string | number;
7+
declare const list4: string | number | { [Symbol.iterator](): Iterator<any> };
8+
declare const list5: string | number | Set<string>;
9+
</script>
10+
11+
<template>
12+
<div v-for="f in list1" :key="f">{{ exactType(f, 1 as number) }}</div>
13+
<div v-for="f in list2" :key="f">{{ exactType(f, 1 as string | number) }}</div>
14+
<div v-for="f in list3" :key="f">{{ exactType(f, 1 as string | number) }}</div>
15+
<div v-for="f in list4" :key="f">{{ exactType(f, 1 as any) }}</div>
16+
<div v-for="f in list5" :key="f">{{ exactType(f, 1 as string | number | string) }}</div>
17+
</template>

0 commit comments

Comments
 (0)