打字稿:未找到导出/JSX 元素类型没有任何构造或调用签名

Posted

技术标签:

【中文标题】打字稿:未找到导出/JSX 元素类型没有任何构造或调用签名【英文标题】:Typescript: export was not found / JSX element type does not have any construct or call signatures 【发布时间】:2020-07-18 01:36:27 【问题描述】:

我想将我的 Typescript React 组件库用作一个包。

我的文件如下所示:

MyComponent.tsx:

import React,  FunctionComponent  from 'react';
import styled from 'styled-components';

export interface IProps 
 prop1: boolean;


const HeaderWrapper = styled.div`
  width: 100vw;
`;

const MyComponent: FunctionComponent<IProps> = (prop1: IProps) => (
  <HeaderWrapper prop1=prop1><h1>Test</h1></HeaderWrapper>
);

export default MyComponent;

index.ts

export * from './components/MyComponent';

我没有错误并且可以使用该组件。 然后我运行tscdeclaration: true。然后我将我的 dist 文件夹发布到 npm。

当我在另一个项目中安装包时,我会这样使用它:

import MyComponent from 'my-package';

在构建项目时出现以下错误:

export 'default' (imported as 'MyComponent') was not found in 'my-package'

&

TS2604: JSX element type 'MyComponent' does not have any construct or call signatures.

我试试

'export default as MyComponent from './components/MyComponent';

'export * as MyComponent from './components/MyComponent';

但它也不起作用。 唯一的解决方案是在新项目中导入这样的组件:

import MyComponent from 'my-package/dist/components/MyComponent';

但我想以索引文件的方式使用它。 有人可以帮帮我吗?

非常感谢!

【问题讨论】:

【参考方案1】:

我很笨。

我必须像这样使用这个包:

import  MyComponent  from 'my-package';

这当然有效:)

【讨论】:

【参考方案2】:

您可以使用object destructuring

使用此代码

import  MyComponent  from 'my-package';

代替

import MyComponent from 'my-package';

【讨论】:

以上是关于打字稿:未找到导出/JSX 元素类型没有任何构造或调用签名的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript、react-router 和 jsx:JSX 元素类型 'Route' 没有任何构造或调用签名

JSX 元素类型“...”没有任何构造或调用签名

TypeScript 3:JSX 元素类型“组件”没有任何构造或调用签名。 [2604]

JSX元素类型[外部模块]没有任何构造或调用签名

打字稿“新”表达式,其目标缺少构造签名,隐含具有“任何”类型

打字稿抱怨使用 React.createClass 时类型“JSX.IntrinsicElements”上不存在属性?