Skip to content

Commit 4b27d91

Browse files
committed
chore: improve v-for typing for generic
#2758
1 parent 3216106 commit 4b27d91

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

packages/vue-language-core/src/utils/directorySharedTypes.ts

+14-6
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,6 @@ export type Element = PickNotAny<import('vue/jsx-runtime').JSX.Element, JSX.Elem
2525
2626
type IsAny<T> = boolean extends (T extends never ? true : false) ? true : false;
2727
export type PickNotAny<A, B> = IsAny<A> extends true ? B : A;
28-
type ForableSource<T> = [
29-
T extends { [Symbol.iterator](): Iterator<infer T1> } ? T1 : T[keyof T], // item
30-
typeof Symbol.iterator extends keyof T ? number : T extends T ? keyof T : never, // key
31-
typeof Symbol.iterator extends keyof T ? undefined : number, // index
32-
][];
3328
3429
export type Prettify<T> = {
3530
[K in keyof T]: T[K];
@@ -51,7 +46,20 @@ export type GlobalComponents =
5146
| 'Teleport'
5247
>;
5348
54-
export declare function getVForSourceType<T>(source: T): ForableSource<NonNullable<T extends number ? number[] : T extends string ? string[] : T>>;
49+
// v-for
50+
export declare function getVForSourceType(source: number): [number, number, number][];
51+
export declare function getVForSourceType(source: string): [string, number, number][];
52+
export declare function getVForSourceType<T extends { [Symbol.iterator](): Iterator<any> }>(source: T): [
53+
T extends { [Symbol.iterator](): Iterator<infer T1> } ? T1 : never, // item
54+
number, // key
55+
undefined, // index
56+
][];
57+
export declare function getVForSourceType<T>(source: T): [
58+
T extends any ? T[keyof T] : never, // item
59+
T extends any ? keyof T : never, // key
60+
number, // index
61+
][];
62+
5563
export declare function getSlotParams<T>(slot: T): Parameters<PickNotAny<NonNullable<T>, (...args: any[]) => any>>;
5664
export declare function getSlotParam<T>(slot: T): Parameters<PickNotAny<NonNullable<T>, (...args: any[]) => any>>[0];
5765
export declare function directiveFunction<T>(dir: T):
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<template>
2+
<div v-for="(val, key) in ({} as T)">
3+
{{ exactType(val, {} as T extends any ? T[keyof T] : never) }}
4+
{{ exactType(key, {} as T extends any ? keyof T : never) }}
5+
</div>
6+
</template>
7+
8+
<script lang="ts" setup generic="T extends Record<string, string>">
9+
import { exactType } from '../shared';
10+
</script>

0 commit comments

Comments
 (0)