Skip to content

Commit 0adcbbd

Browse files
committed
feat: support $slots
close vuejs#539
1 parent 8006027 commit 0adcbbd

File tree

2 files changed

+6
-1
lines changed

2 files changed

+6
-1
lines changed

packages/vscode-vue-languageservice/src/generators/template.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ export function generate(
7575
}>,
7676
}> = {};
7777
const tagResolves: Record<string, {
78+
name: string,
7879
baseProps: string,
7980
props: string,
8081
emit: string,
@@ -213,6 +214,7 @@ export function generate(
213214
}
214215

215216
tagResolves[tag] = {
217+
name: var_correctTagName,
216218
baseProps: var_baseProps,
217219
props: var_props,
218220
emit: var_emit,
@@ -1119,7 +1121,7 @@ export function generate(
11191121
slotName = prop.arg.content;
11201122
}
11211123
const diagStart = tsCodeGen.getText().length;
1122-
tsCodeGen.addText(`__VLS_wrapComponents['' as __VLS_GetComponentName<typeof __VLS_wrapComponents, '${parentEl.tag}'>].__VLS_slots`);
1124+
tsCodeGen.addText(`({ ...__VLS_getTemplateSlots(__VLS_wrapComponents[${tagResolves[parentEl.tag].name}]), ...__VLS_getScriptSlots(__VLS_rawComponents[${tagResolves[parentEl.tag].name}])})`);
11231125
const argRange = prop.arg
11241126
? {
11251127
start: prop.arg.loc.start.offset,

packages/vscode-vue-languageservice/src/utils/globalDoc.ts

+3
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ declare global {
6565
function __VLS_directiveFunction<T>(dir: T): T extends ObjectDirective<infer E, infer V> ? V extends { value: infer V_2 } ? (value: V_2) => void : (value: V) => void
6666
: T extends FunctionDirective<infer E, infer V> ? V extends { value: infer V_2 } ? (value: V_2) => void : (value: V) => void : T;
6767
68+
function __VLS_getTemplateSlots<T>(t: T): T extends { __VLS_slots: infer S } ? S : {};
69+
function __VLS_getScriptSlots<T>(t: T): T extends new (...args: any) => { $slots?: infer S } ? (S extends object ? S : {}) : {};
70+
6871
type __VLS_GetComponentName<T, K extends string> = K extends keyof T ? IsAny<T[K]> extends false ? K : __VLS_GetComponentName_CamelCase<T, CamelCase<K>> : __VLS_GetComponentName_CamelCase<T, CamelCase<K>>;
6972
type __VLS_GetComponentName_CamelCase<T, K extends string> = K extends keyof T ? IsAny<T[K]> extends false ? K : __VLS_GetComponentName_CapitalCase<T, Capitalize<K>> : __VLS_GetComponentName_CapitalCase<T, Capitalize<K>>;
7073
type __VLS_GetComponentName_CapitalCase<T, K> = K extends keyof T ? K : never;

0 commit comments

Comments
 (0)