جاوااسکریپت - چگونه از res.locals در Express با تایپاسکریپت داخل Next.js استفاده کنیم
من در برنامه خود از express - next.js استفاده میکنم و مقداری پیکربندی را از سرور به مشتری از طریق res.locals منتقل میکنم، پروژه من در تایپاسکریپت است و از "@types/next": "^8.0.6" استفاده میکنم.
مشکل: تایپاسکریپت میگوید "خصوصیت 'locals' در نوع 'ServerResponse | Partial<ServerResponse>' وجود ندارد."
پاسخ مورد انتظار: - راهی برای بازنویسی "NextContext.res" یا "NextResponse" تا برابر با Express.res باشد به جای http.ServerResponse - راهی برای بازنویسی NextResponse برای افزودن locals: any | {x:strong}.
این مثال سادهشده از آنچه داریم و نحوه بازتولید آن است:
import React from 'react';
import Document, { Head, Main, NextScript } from 'next/document';
type Props = {
locals: {};
}
export default class MyDocument extends Document<Props> {
render() {
const { locals } = this.props;
return (
<html>
<Head>
<ComponentUsingLocalsInfo locals={locals} />
</Head>
<body>
<Main />
<NextScript />
</body>
</html>
)
}
}
MyDocument.getInitialProps = async (ctx) => {
const { locals } = ctx.res;
const initialProps = await Document.getInitialProps(ctx);
return {
...initialProps,
locals,
}
}
پاسخ شماره ۱
برای یک راه حل سریع، این چیزی است که برای من جواب داد:
import { Response } from 'express';
MyDocument.getInitialProps = async (ctx) => {
const { locals } = (ctx.res as Response);
}
پاسخ شماره ۲
شما همیشه میتوانید یک رابط کاربری سفارشی به این صورت ایجاد کنید:
export interface Custom_Initial_Props extends Omit<NextPageContext, 'res'> {
res: Express.Request;
}
