What problem does this feature solve?
(I'm sure I saw this mentioned somewhere before, but I can't find any issue nor discussion about it. Apologies if it's a dupe.)
For Typescript users, script setup needs a defineSlots macro to create strongly typed slots.
The problem is that today the code generated by script setup creates TS compilation errors.
The following template creates an error Binding element 'ok' implicitly has an 'any' type.
(You have the same error even if you don't destructure the slot value.)
<my-dialog v-slot="{ ok, cancel }">
<button @click="ok()">Close</button>
</my-dialog>
This is quite a blocker because there's no good workaround:
- You can't add type annotations inside templates (and in this instance it would be very ugly very quickly);
- You can't add
ts-ignore comments in the template.
- This errors is only reported with
--noImplicitAny but that's a strict flag that we really don't want to globally disable in our codebase.
Of course, on top of the TS error, having typed slots would be a nice improvement for Volar.
What does the proposed API look like?
As a quick-fix / workaround, I suggest that the compiler adds // @ts-ignore: implicit any before the generated slot code.
A better, long term fix would be to allow TS users to type their slots, I suggest:
defineSlots<{
default: {
quantity: number;
order(): void;
}
}>();
What problem does this feature solve?
(I'm sure I saw this mentioned somewhere before, but I can't find any issue nor discussion about it. Apologies if it's a dupe.)
For Typescript users,
script setupneeds adefineSlotsmacro to create strongly typed slots.The problem is that today the code generated by script setup creates TS compilation errors.
The following template creates an error
Binding element 'ok' implicitly has an 'any' type.(You have the same error even if you don't destructure the slot value.)
This is quite a blocker because there's no good workaround:
ts-ignorecomments in the template.--noImplicitAnybut that's a strict flag that we really don't want to globally disable in our codebase.Of course, on top of the TS error, having typed slots would be a nice improvement for Volar.
What does the proposed API look like?
As a quick-fix / workaround, I suggest that the compiler adds
// @ts-ignore: implicit anybefore the generated slot code.A better, long term fix would be to allow TS users to type their slots, I suggest: