我想用 NextJS、TypeScript 和 mdx-js 建立一个网站。我曾经yarn create next-app
设置项目,然后添加 typescript 和 mdx-js。我创建了一个简单的 MDX 文件并将其导入 index.tsx。当我运行yarn dev
时,项目构建得很好,我可以在浏览器中看到结果。
由于 TS 编译器最初不理解 MDX 文件的结构,因此我创建了一个 global.d.ts 文件,该文件告诉加载的 MDX 文件的默认导出提供了一个 JSX.Element:
declare module '*.mdx' {
declare const component: JSX.Element;
export default component;
}
但是,当我想在 index.tsx 中呈现导入的组件时,VS Code 在编辑器中显示错误 ts2604:
我真的不明白VS在抱怨什么,当我写react组件然后在其他地方导入它们时,我总是使用JSX.Element
作为函数组件的返回类型。如前所述,下一个构建工作得很好。
到目前为止我已经尝试过:
- 添加
import React from 'react'
index.tsx 或 global.d.ts 并不能解决问题。 - 将类型更改为
ReactNode
(如在此博客文章中所做的那样)在 VS 中会产生相同的错误。 - 当我只是
export default any;
来自 global.d.ts 时,错误显然消失了,但我失去了类型支持,这不应该是真正的目标。 - 当然,在添加/更改 d.ts 文件时,我将其添加到 tsconfig.json 并多次重新启动 VS Code 以确保正确重新初始化 TS 语言服务器。
对于 MDX 文件,正确的 TS 模块声明应该如何?您可以在https://github.com/feO2x/nextjs-ts-mdx找到此问题的 MCVE
谢谢您的帮助!