Sveltejs SSR — Свойство «визуализация» не существует для типа «typeof SvelteComponentDev»

#typescript #server-side-rendering #svelte #rollupjs

Вопрос:

Я пытаюсь выполнить рендеринг на стороне сервера стройного компонента с помощью машинописного текста и свертки.

 // renderer.ts
import type { SvelteComponentDev } from 'svelte/internal';
import App from '../../../routes/index.svelte';

export default (): SvelteComponentDev => {
    const { html } = App.render();
    return html;
};
 

Он возвращает следующие ошибки

 Plugin typescript: @rollup/plugin-typescript TS2339: Property 'render' does not exist on type 'typeof SvelteComponentDev'.
 

Из моего исследования я придумал следующий обходной путь, но я не большой его поклонник.
У вас, ребята, есть лучший способ сохранить стройный компонент в машинописном тексте?
Ткс

 // renderer.ts
import type { SvelteComponentDev } from 'svelte/internal';

let App;
import('../../../routes/index.svelte').then(module => {
    App = module.defau<
});

export default (): SvelteComponentDev => {
    const { html } = App.render();
    return html;
};
 

Ответ №1:

Определения типов написаны для DOM API, а не для SSR API, так что это всего лишь вопрос ошибок типа, которые вы можете так или иначе замолчать. Возможно, самым простым является приведение типа к any :

 // renderer.ts
import type { SvelteComponentDev } from 'svelte/internal';
import App from '../../../routes/index.svelte';

export default (): SvelteComponentDev => {
    const { html } = (App as any).render();
    return html;
};
 

Кстати, вы здесь ошибаетесь , html это а string , так и должно быть

 // renderer.ts
import type { SvelteComponentDev } from 'svelte/internal';
import App from '../../../routes/index.svelte';

export default (): string => {
    const { html } = (App as any).render();
    return html;
};
 

Комментарии:

1. Действительно, приведение типа к любым работам! Спасибо