#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. Действительно, приведение типа к любым работам! Спасибо