Skip to content

Commit 07a1baa

Browse files
authored
fix(language-core): align types of v-for with core (#5084)
1 parent b89dbee commit 07a1baa

File tree

3 files changed

+21
-41
lines changed

3 files changed

+21
-41
lines changed

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

+4-7
Original file line numberDiff line numberDiff line change
@@ -117,23 +117,20 @@ export function generateGlobalTypes(options: VueCompilerOptions) {
117117
>>;
118118
type __VLS_UseTemplateRef<T> = Readonly<import('${lib}').ShallowRef<T | null>>;
119119
120-
function __VLS_getVForSourceType(source: number): [number, number, number][];
121-
function __VLS_getVForSourceType(source: string): [string, number, number][];
120+
function __VLS_getVForSourceType(source: number): [number, number][];
121+
function __VLS_getVForSourceType(source: string): [string, number][];
122122
function __VLS_getVForSourceType<T extends any[]>(source: T): [
123123
item: T[number],
124-
key: number,
125124
index: number,
126125
][];
127126
function __VLS_getVForSourceType<T extends { [Symbol.iterator](): Iterator<any> }>(source: T): [
128127
item: T extends { [Symbol.iterator](): Iterator<infer T1> } ? T1 : never,
129-
key: number,
130-
index: undefined,
128+
index: number,
131129
][];
132130
// #3845
133131
function __VLS_getVForSourceType<T extends number | { [Symbol.iterator](): Iterator<any> }>(source: T): [
134132
item: number | (Exclude<T, number> extends { [Symbol.iterator](): Iterator<infer T1> } ? T1 : never),
135-
key: number,
136-
index: undefined,
133+
index: number,
137134
][];
138135
function __VLS_getVForSourceType<T>(source: T): [
139136
item: T[keyof T],

test-workspace/tsc/passedFixtures/shared.d.ts

-5
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,3 @@ type IfEquals<T, U, Y = unknown, N = never> =
33
(<G>() => G extends T ? 1 : 2) extends
44
(<G>() => G extends U ? 1 : 2) ? Y : N;
55
export declare function exactType<T, U>(draft: T & IfEquals<T, U>, expected: U & IfEquals<T, U>): IfEquals<T, U>;
6-
7-
// https://stackoverflow.com/a/49928360
8-
type IfNotAny<T> = 0 extends 1 & T ? never : T;
9-
type IfNotUndefined<T> = Exclude<T, undefined> extends never ? never : T;
10-
export declare function isNotAnyOrUndefined<T>(value: IfNotAny<IfNotUndefined<T>>): void;

test-workspace/tsc/passedFixtures/vue3/v-for/main.vue

+17-29
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,53 @@
11
<template>
22
<!-- number -->
3-
<div v-for="(val, key) in 10">
3+
<div v-for="(val, index) in 10">
44
{{ exactType(val, {} as number) }}
5-
{{ isNotAnyOrUndefined(val) }}
6-
{{ exactType(key, {} as number) }}
7-
{{ isNotAnyOrUndefined(key) }}
5+
{{ exactType(index, {} as number) }}
86
</div>
97
<!-- string -->
10-
<div v-for="(val, key) in 'foo'">
8+
<div v-for="(val, index) in 'foo'">
119
{{ exactType(val, {} as string) }}
12-
{{ isNotAnyOrUndefined(val) }}
13-
{{ exactType(key, {} as number) }}
14-
{{ isNotAnyOrUndefined(key) }}
10+
{{ exactType(index, {} as number) }}
1511
</div>
1612
<!-- array -->
17-
<div v-for="(val, key) in arr">
13+
<div v-for="(val, index) in arr">
1814
{{ exactType(val, {} as 'a' | 'b') }}
19-
{{ isNotAnyOrUndefined(val) }}
20-
{{ exactType(key, {} as number) }}
21-
{{ isNotAnyOrUndefined(key) }}
15+
{{ exactType(index, {} as number) }}
2216
</div>
2317
<!-- map -->
24-
<div v-for="(val, key) in map">
18+
<div v-for="(val, index) in map">
2519
{{ exactType(val, {} as [string, number]) }}
26-
{{ isNotAnyOrUndefined(val) }}
27-
{{ exactType(key, {} as number) }}
28-
{{ isNotAnyOrUndefined(key) }}
20+
{{ exactType(index, {} as number) }}
2921
</div>
3022
<!-- obj -->
31-
<div v-for="(val, key) in obj">
23+
<div v-for="(val, key, index) in obj">
3224
{{ exactType(val, {} as string | number) }}
33-
{{ isNotAnyOrUndefined(val) }}
3425
{{ exactType(key, {} as 'a' | 'b') }}
35-
{{ isNotAnyOrUndefined(key) }}
26+
{{ exactType(index, {} as number) }}
3627
</div>
3728
<!-- objUnion -->
38-
<div v-for="(val, key) in objUnion">
29+
<div v-for="(val, key, index) in objUnion">
3930
<!-- {{ exactType(val, {} as string | number) }} -->
4031
{{ exactType(val, {} as string) }}
41-
{{ isNotAnyOrUndefined(val) }}
4232
<!-- {{ exactType(key, {} as 'a' | 'b') }} -->
4333
{{ exactType(key, {} as 'a') }}
44-
{{ isNotAnyOrUndefined(key) }}
34+
{{ exactType(index, {} as number) }}
4535
</div>
4636
<!-- record -->
47-
<div v-for="(val, key) in record">
37+
<div v-for="(val, key, index) in record">
4838
{{ exactType(val, {} as string) }}
49-
{{ isNotAnyOrUndefined(val) }}
5039
{{ exactType(key, {} as string) }}
51-
{{ isNotAnyOrUndefined(key) }}
40+
{{ exactType(index, {} as number) }}
5241
</div>
5342
<!-- any -->
54-
<div v-for="(val, key) in _any">
43+
<div v-for="(val, index) in _any">
5544
{{ exactType(val, {} as any) }}
56-
{{ exactType(key, {} as number) }}
57-
{{ isNotAnyOrUndefined(key) }}
45+
{{ exactType(index, {} as number) }}
5846
</div>
5947
</template>
6048

6149
<script setup lang="ts">
62-
import { exactType, isNotAnyOrUndefined } from '../../shared';
50+
import { exactType } from '../../shared';
6351
6452
const arr = ['a', 'b'] as const;
6553
const map = new Map<string, number>();

0 commit comments

Comments
 (0)