[英]Can't import named exports from an external NPM library with TypeScript
我无法从我创建的外部组件库中导入命名导出,如官方文档中所述。 这种情况似乎非常小众,因为我很难在网上找到任何能让我更接近解决方案的东西。 有没有人设法让它工作?
上下文来了……
模态组件(片段)
const Modal: React.FC<ModalProps> = ({ onCancelCallback, children }) => {...};
export default Modal;
如您所见,我将其作为默认值从 Modal.tsx 导出,但稍后将其重新导出为每个文件夹的 index.ts 文件中的命名导出,如下所示:
export { default as Modal } from './Modal';
然后
export { Modal } from './Modal';
最后:
export * from './components';
模态道具
export interface ModalProps {
onCancelCallback?: () => void;
}
这是我在 Next.js 组件之一(不是页面)中导入外部“模态”组件的方式:
nextjscomponent.tsx
import dynamic from 'next/dynamic';
const Modal = dynamic(() => import('my-ui-kit').then((mod) => mod.Modal), {
ssr: false,
});
TypeScript 错误
Argument of type '() => Promise<React.ComponentClass<never, any> | React.FunctionComponent<never> | { default: React.ComponentType<never>; } | React.FC<ModalProps>>' is not assignable to parameter of type 'DynamicOptions<{}> | (() => LoaderComponent<{}>) | LoaderComponent<{}>'.
Type '() => Promise<React.ComponentClass<never, any> | React.FunctionComponent<never> | { default: React.ComponentType<never>; } | React.FC<ModalProps>>' is not assignable to type '() => LoaderComponent<{}>'.
Type 'Promise<ComponentClass<never, any> | FunctionComponent<never> | { default: ComponentType<never>; } | FC<ModalProps>>' is not assignable to type 'LoaderComponent<{}>'.
Type 'ComponentClass<never, any> | FunctionComponent<never> | { default: ComponentType<never>; } | FC<ModalProps>' is not assignable to type 'ComponentClass<{}, any> | FunctionComponent<{}> | { default: ComponentType<{}>; }'.
Type 'ComponentClass<never, any>' is not assignable to type 'ComponentClass<{}, any> | FunctionComponent<{}> | { default: ComponentType<{}>; }'.
Type 'ComponentClass<never, any>' is not assignable to type 'ComponentClass<{}, any>'.
Types of property 'getDerivedStateFromProps' are incompatible.
Type 'GetDerivedStateFromProps<never, any> | undefined' is not assignable to type 'GetDerivedStateFromProps<{}, any> | undefined'.
Type 'GetDerivedStateFromProps<never, any>' is not assignable to type 'GetDerivedStateFromProps<{}, any>'.
Types of parameters 'nextProps' and 'nextProps' are incompatible.
Type 'Readonly<{}>' is not assignable to type 'never'.ts(2345)
非常感谢任何帮助。 先感谢您。
在 Next.js 的官方 GitHub 页面上,有人告诉我这个问题可能与两个 @types/react 库共同存在于同一个 Next.js 项目中的事实有关。
这是我尝试(无济于事)来检验这个假设的方法:
我快速“解释了为什么@types/react”并看到以下内容:
yarn why v1.22.4
[1/4] 🤔 Why do we have the module "@types/react"...?
[2/4] 🚚 Initialising dependency graph...
[3/4] 🔍 Finding dependency...
[4/4] 🚡 Calculating file sizes...
=> Found "@types/react@16.9.32"
info Has been hoisted to "@types/react"
info This module exists because it's specified in "devDependencies".
info Disk size without dependencies: "164KB"
info Disk size with unique dependencies: "1.98MB"
info Disk size with transitive dependencies: "1.98MB"
info Number of shared dependencies: 2
=> Found "@types/react-dom#@types/react@16.9.31"
info This module exists because "@types#react-dom" depends on it.
info Disk size without dependencies: "164KB"
info Disk size with unique dependencies: "1.98MB"
info Disk size with transitive dependencies: "1.98MB"
info Number of shared dependencies: 2
✨ Done in 0.99s.
然后我尝试了三件事:
我仍然看到相同的错误消息。
顺便说一句,当从 Next.js 项目自己的组件文件夹导入时,相同的组件在动态加载时工作正常,但目标显然是使用外部 UI 工具包。
这是来自 @r0skar 的 Next.js 的 GitHub 的解决方案:
我做了以下事情:
在我的外部 ui 套件中
export type { ModalProps } from './Modal.interface';
在 Next.js
import { ModalProps } from 'my-ui-kit';
const Modal = dynamic<ModalProps>(() => import('my-ui-kit').then((mod) => mod.Modal), {
ssr: false,
});
这让 TypeScript(和我自己)很高兴。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.