Skip to content

Commit

Permalink
chore: improve v-for typing for generic
Browse files Browse the repository at this point in the history
  • Loading branch information
johnsoncodehk committed May 1, 2023
1 parent 3216106 commit 4b27d91
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 6 deletions.
20 changes: 14 additions & 6 deletions packages/vue-language-core/src/utils/directorySharedTypes.ts
Expand Up @@ -25,11 +25,6 @@ export type Element = PickNotAny<import('vue/jsx-runtime').JSX.Element, JSX.Elem
type IsAny<T> = boolean extends (T extends never ? true : false) ? true : false;
export type PickNotAny<A, B> = IsAny<A> extends true ? B : A;
type ForableSource<T> = [
T extends { [Symbol.iterator](): Iterator<infer T1> } ? T1 : T[keyof T], // item
typeof Symbol.iterator extends keyof T ? number : T extends T ? keyof T : never, // key
typeof Symbol.iterator extends keyof T ? undefined : number, // index
][];
export type Prettify<T> = {
[K in keyof T]: T[K];
Expand All @@ -51,7 +46,20 @@ export type GlobalComponents =
| 'Teleport'
>;
export declare function getVForSourceType<T>(source: T): ForableSource<NonNullable<T extends number ? number[] : T extends string ? string[] : T>>;
// v-for
export declare function getVForSourceType(source: number): [number, number, number][];
export declare function getVForSourceType(source: string): [string, number, number][];
export declare function getVForSourceType<T extends { [Symbol.iterator](): Iterator<any> }>(source: T): [
T extends { [Symbol.iterator](): Iterator<infer T1> } ? T1 : never, // item
number, // key
undefined, // index
][];
export declare function getVForSourceType<T>(source: T): [
T extends any ? T[keyof T] : never, // item
T extends any ? keyof T : never, // key
number, // index
][];
export declare function getSlotParams<T>(slot: T): Parameters<PickNotAny<NonNullable<T>, (...args: any[]) => any>>;
export declare function getSlotParam<T>(slot: T): Parameters<PickNotAny<NonNullable<T>, (...args: any[]) => any>>[0];
export declare function directiveFunction<T>(dir: T):
Expand Down
10 changes: 10 additions & 0 deletions packages/vue-test-workspace/vue-tsc/v-for/generic.vue
@@ -0,0 +1,10 @@
<template>
<div v-for="(val, key) in ({} as T)">
{{ exactType(val, {} as T extends any ? T[keyof T] : never) }}
{{ exactType(key, {} as T extends any ? keyof T : never) }}
</div>
</template>

<script lang="ts" setup generic="T extends Record<string, string>">
import { exactType } from '../shared';
</script>

0 comments on commit 4b27d91

Please sign in to comment.