Att skriva <svelte:component>'s "this"-egenskap i TypeScript


Jag bygger på något sätt ett portalsystem i Svelte med hjälp av en store för att skicka en komponent att visas någonstans högre upp i komponentträdet.

Mitt problem handlar inte om att implementera det systemet, det handlar om att skriva typ för butiken. Jag försökte deklarera det så här:

const modalComponent = writable<SvelteComponent>(null)

Men detta fungerar inte. När jag importerar en komponent någonstans visar VS Code mig en typ av typeof <componentName>__SvelteComponent_, vilket inte är kompatibelt med SvelteComponent-typen (som faktiskt är en alias för SvelteComponentDev):

Typen 'typeof __SvelteComponent_' saknar följande egenskaper från typen 'SvelteComponentDev': $set, $on, $destroy, $capture_state och 2 till.

Hur ska jag skriva detta? Jag skulle vilja undvika att använda any.

Uppdatering: här är en codesandbox av vad som skulle reproducera fallet. Tyvärr verkar jag inte kunna få det att fungera med TypeScript. Jag delar det fortfarande, i hopp om att det kan hjälpa.

Svar #1

REDIGERA (2023)
Det är nu fixat och bör skrivas writable<typeof SvelteComponent>.

(Ja, det har blivit fixat för länge sedan, förlåt :D )


Som @dummdidumm instruerade mig, skapade jag ett ärende här för teamet på Svelte att åtgärda det.

Under tiden kommer jag att markera detta som svaret för tillfället och kommer att uppdatera det så snart problemet är åtgärdat och släppt. Tack!

Relaterade artiklar