Skip to content

Commit c0df03a

Browse files
committed
feat: support native element
1 parent 6e97d23 commit c0df03a

File tree

4 files changed

+28
-14
lines changed

4 files changed

+28
-14
lines changed

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

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,22 @@ export function generateGlobalTypes(lib: string, target: number, strictTemplates
5757
? K extends { __ctx?: { props?: infer P } } ? NonNullable<P> : never
5858
: T extends (props: infer P, ...args: any) => any ? P
5959
: {};
60+
type __VLS_FunctionalGeneralComponent<T> = (props: ${fnPropsType}, ctx?: any) => __VLS_Element & {
61+
__ctx?: {
62+
attrs?: any,
63+
slots?: T extends { ${getSlotsPropertyName(target)}: infer Slots } ? Slots : any,
64+
emit?: T extends { $emit: infer Emit } ? Emit : any,
65+
props?: ${fnPropsType},
66+
expose?(exposed: T): void,
67+
}
68+
};
69+
type __VLS_NormalizeSlotReturns<S, R = ReturnType<NonNullable<S>>> = R extends any[] ? {
70+
[K in keyof R]: R[K] extends infer V
71+
? V extends { __ctx?: any } ? V
72+
: V extends import('${lib}').VNode<infer E> ? E
73+
: ReturnType<__VLS_FunctionalGeneralComponent<V>>
74+
: never
75+
} : R;
6076
type __VLS_IsFunction<T, K> = K extends keyof T
6177
? __VLS_IsAny<T[K]> extends false
6278
? unknown extends T[K]
@@ -99,19 +115,6 @@ export function generateGlobalTypes(lib: string, target: number, strictTemplates
99115
type __VLS_PrettifyGlobal<T> = { [K in keyof T]: T[K]; } & {};
100116
type __VLS_UseTemplateRef<T> = Readonly<import('${lib}').ShallowRef<T | null>>;
101117
102-
type __VLS_FunctionalGeneralComponent<T> = (props: ${fnPropsType}, ctx?: any) => __VLS_Element & {
103-
__ctx?: {
104-
attrs?: any,
105-
slots?: T extends { ${getSlotsPropertyName(target)}: infer Slots } ? Slots : any,
106-
emit?: T extends { $emit: infer Emit } ? Emit : any,
107-
props?: ${fnPropsType},
108-
expose?(exposed: T): void,
109-
}
110-
};
111-
type __VLS_NormalizeSlotReturns<S, R = ReturnType<NonNullable<S>>> = R extends any[] ? {
112-
[K in keyof R]: R[K] extends { __ctx?: any } ? R[K] : ReturnType<__VLS_FunctionalGeneralComponent<R[K]>>
113-
} : R;
114-
115118
function __VLS_getVForSourceType(source: number): [number, number, number][];
116119
function __VLS_getVForSourceType(source: string): [string, number, number][];
117120
function __VLS_getVForSourceType<T extends any[]>(source: T): [

packages/language-core/lib/codegen/template/element.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,12 @@ export function* generateElement(
307307
: undefined;
308308
const failedPropExps: FailedPropExpression[] = [];
309309

310+
ctx.currentComponent?.childNodes.push({
311+
name: `__VLS_nativeElements.${node.tag}`,
312+
start: node.loc.start.offset,
313+
end: node.loc.end.offset
314+
});
315+
310316
yield `__VLS_asFunctionalElement(__VLS_intrinsicElements`;
311317
yield* generatePropertyAccess(
312318
options,

test-workspace/tsc/passedFixtures/vue3/slot-children/main.vue

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,9 @@ const foo = {} as 'a' | 'b';
1111
<Child :foo="(`b` as const)" />
1212
<!-- @vue-expect-error -->
1313
<Child :foo="(`c` as const)" />
14+
15+
<a></a>
16+
<!-- @vue-expect-error -->
17+
<img />
1418
</Parent>
1519
</template>
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
<script setup lang="ts" generic="T">
2+
import type { VNode } from 'vue';
23
import Child from './child.vue';
34
45
defineProps<{
56
foo: T;
67
}>();
78
defineSlots<{
8-
default?(): ReturnType<typeof Child<T>>[];
9+
default?(): (ReturnType<typeof Child<T>> | VNode<HTMLAnchorElement>)[];
910
}>();
1011
</script>

0 commit comments

Comments
 (0)