Skip to content

Commit

Permalink
fix(language-core): special treatment for number elements inside `v-f…
Browse files Browse the repository at this point in the history
…or` (#3859)
  • Loading branch information
so1ve authored Mar 20, 2024
1 parent 02af955 commit efa7153
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 9 deletions.
24 changes: 15 additions & 9 deletions packages/language-core/lib/generators/script.ts
Original file line number Diff line number Diff line change
Expand Up @@ -211,19 +211,25 @@ const __VLS_intrinsicElements: __VLS_IntrinsicElements;
function __VLS_getVForSourceType(source: number): [number, number, number][];
function __VLS_getVForSourceType(source: string): [string, number, number][];
function __VLS_getVForSourceType<T extends any[]>(source: T): [
T[number], // item
number, // key
number, // index
item: T[number],
key: number,
index: number,
][];
function __VLS_getVForSourceType<T extends { [Symbol.iterator](): Iterator<any> }>(source: T): [
T extends { [Symbol.iterator](): Iterator<infer T1> } ? T1 : never, // item
number, // key
undefined, // index
item: T extends { [Symbol.iterator](): Iterator<infer T1> } ? T1 : never,
key: number,
index: undefined,
][];
// #3845
function __VLS_getVForSourceType<T extends number | { [Symbol.iterator](): Iterator<any> }>(source: T): [
item: number | (Exclude<T, number> extends { [Symbol.iterator](): Iterator<infer T1> } ? T1 : never),
key: number,
index: undefined,
][];
function __VLS_getVForSourceType<T>(source: T): [
T[keyof T], // item
keyof T, // key
number, // index
item: T[keyof T],
key: keyof T,
index: number,
][];
// @ts-ignore
Expand Down
17 changes: 17 additions & 0 deletions test-workspace/tsc/vue3/#3845/main.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<script setup lang="ts">
import { exactType } from '../../shared';
declare const list1: number | number[];
declare const list2: string | number[];
declare const list3: string | number;
declare const list4: string | number | { [Symbol.iterator](): Iterator<any> };
declare const list5: string | number | Set<string>;
</script>

<template>
<div v-for="f in list1" :key="f">{{ exactType(f, 1 as number) }}</div>
<div v-for="f in list2" :key="f">{{ exactType(f, 1 as string | number) }}</div>
<div v-for="f in list3" :key="f">{{ exactType(f, 1 as string | number) }}</div>
<div v-for="f in list4" :key="f">{{ exactType(f, 1 as any) }}</div>
<div v-for="f in list5" :key="f">{{ exactType(f, 1 as string | number | string) }}</div>
</template>

0 comments on commit efa7153

Please sign in to comment.