typescript - Next.js typescript自定义文档错误:TypeError:没有'new'就无法调用类构造函数文档
问题描述
我有一个网站,其中包含 _document.js 的自定义文档。但是当我跑的时候yarn dev
我得到了
TypeError: Class constructor Document cannot be invoked without 'new'
我搜索了很长时间的解决方案并阅读了很多解决方案,但他们在preset-env
里面谈论.babelrc
。我没有任何 babel 配置文件。
当我改变它的实验性"target": "es5"
是"target": "es5"
固定的。我不想es6
在我的 tsconfig 中使用。
我该怎么办?(我是新手,next.js
但我精通js
and react.js
)
更新
这是我的_document.tsx
:
import Document, {
Html,
Head,
Main,
NextScript,
DocumentContext,
} from 'next/document'
import settings from '../utils/settings/settings'
class MyDocument extends Document {
render() {
return (
<Html lang="fa">
<Head>
<script
async
src={`https://www.googletagmanager.com/gtag/js?id=${settings.TRACKING_ID}`}
/>
<script
dangerouslySetInnerHTML={{
__html: `
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '${settings.TRACKING_ID}', { page_path: window.location.pathname });
`,
}}
/>
</Head>
<body dir="rtl">
<Main />
<NextScript />
<>
{/* Google Tag Manager */}
<script
dangerouslySetInnerHTML={{
__html: `(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','${settings.GTM_ID}');`,
}}
/>
{/* End Google Tag Manager */}
{/* Google Tag Manager (noscript) */}
<noscript
dangerouslySetInnerHTML={{
__html: `<iframe src="https://www.googletagmanager.com/ns.html?id=${settings.GTM_ID}" height="0" width="0" style="display:none;visibility:hidden"></iframe>`,
}}
/>
{/* End Google Tag Manager (noscript) */}
</>
</body>
</Html>
)
}
}
export default MyDocument
这是我的tsconfig.json
:
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": false,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve"
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
}
解决方案
我使用fork-ts-checker-webpack-plugin
了几个原因,例如在构建之前检查类型以及文档中提到的其他优点,因此当我删除它时问题就解决了。
推荐阅读
- python - 如何使用带有外键的 __str__ '__str__ 返回非字符串(类型产品)'
- reactjs - 如何将上传的值存储到redux store
- angular - 是否有中断(停止)组件生命周期的选项
- node.js - 如何在嵌入式模型中查找和更新内部项目
- node.js - 获得承诺{
在 IBM 云功能中使用 Nodejs - php - 在 php 中为 pusher 创建私有通道身份验证流
- python - 如何从导入 SQLITE 的 UTF-8 CSV 文件中删除 BOM
- handlebars.js - 字符串数组到 json 数组
- r - R:无法设置尝试并继续阻止
- vba - 为什么未绑定的组合框会导致访问数据库冻结?