首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ReactJS TypeScript:尝试导入错误:'ActionButtonProps‘不是从'./ActionButton’中导出的

问题分析

你遇到的错误信息表明在尝试从./ActionButton模块导入ActionButtonProps时失败了。这通常是由于以下几个原因之一:

  1. 模块路径错误./ActionButton文件路径不正确。
  2. 导出错误./ActionButton文件中没有正确导出ActionButtonProps
  3. 类型定义错误./ActionButton文件中定义的ActionButtonProps类型有误。

解决方法

1. 检查模块路径

确保./ActionButton文件的路径是正确的。假设你的文件结构如下:

代码语言:txt
复制
src/
  components/
    ActionButton/
      ActionButton.tsx
      ActionButtonProps.ts

那么你应该这样导入:

代码语言:txt
复制
import { ActionButtonProps } from './ActionButton/ActionButtonProps';

2. 检查导出

确保./ActionButtonProps.ts文件中正确导出了ActionButtonProps类型。例如:

代码语言:txt
复制
// ./ActionButton/ActionButtonProps.ts
export interface ActionButtonProps {
  label: string;
  onClick: () => void;
}

然后在ActionButton.tsx中导出这个类型:

代码语言:txt
复制
// ./ActionButton/ActionButton.tsx
import { ActionButtonProps } from './ActionButtonProps';

export const ActionButton: React.FC<ActionButtonProps> = ({ label, onClick }) => {
  return (
    <button onClick={onClick}>{label}</button>
  );
};

3. 检查类型定义

确保ActionButtonProps类型的定义是正确的。例如:

代码语言:txt
复制
// ./ActionButton/ActionButtonProps.ts
export interface ActionButtonProps {
  label: string;
  onClick: () => void;
}

示例代码

假设你的文件结构如下:

代码语言:txt
复制
src/
  components/
    ActionButton/
      ActionButton.tsx
      ActionButtonProps.ts

ActionButtonProps.ts

代码语言:txt
复制
// ./ActionButton/ActionButtonProps.ts
export interface ActionButtonProps {
  label: string;
  onClick: () => void;
}

ActionButton.tsx

代码语言:txt
复制
// ./ActionButton/ActionButton.tsx
import { ActionButtonProps } from './ActionButtonProps';

export const ActionButton: React.FC<ActionButtonProps> = ({ label, onClick }) => {
  return (
    <button onClick={onClick}>{label}</button>
  );
};

使用示例

代码语言:txt
复制
// src/App.tsx
import React from 'react';
import { ActionButton } from './components/ActionButton/ActionButton';

const App: React.FC = () => {
  const handleClick = () => {
    console.log('Button clicked!');
  };

  return (
    <div>
      <ActionButton label="Click me" onClick={handleClick} />
    </div>
  );
};

export default App;

参考链接

通过以上步骤,你应该能够解决'ActionButtonProps‘不是从'./ActionButton’中导出的错误。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Sentry 开发者贡献指南 - 前端(ReactJS生态)

测试 选择器 测试中未定义的 theme 属性 Babel 语法插件 新语法 可选链 语法 空值合并 语法 Lodash Typescript 迁移指南 Storybook Styleguide 我们使用它吗...email: PropTypes.string }) 如果您要重复使用自定义 prop-type 或传递常见的共享 shape(如 organization、project 或 user), 请确保从我们有用的自定义集合中导入...如果我们尝试访问 undefined 或 null 对象的属性,它将停止并返回 undefined。...我们不是处理渲染组件的实例,而是以与用户相同的方式查询 DOM。我们通过 label 文本找到表单元素(就像用户一样),我们从他们的文本中找到链接和按钮(就像用户一样)。...变量将抛出更有用的错误消息。

6.9K30
  • 将超过5000万行JS代码迁移到TypeScript,我们得到的10大见解

    ,TypeScript 的声明发射会优先使用这些现有的名称空间标识符,而不是合成对私有文件的导入。...在大多数情况下,TypeScript 的声明发射很好用。我们发现的一个问题是,有时 TypeScript 会将类型从依赖项内联到生成的类型中(#37151)。...通过实验,我们发现了防止内联类型声明的一些可选方法,例如: 首选 interface 而不是 type(接口不内联) 如果未导出声明所需的 interface,则 tsc 将拒绝内联该类型并生成明显错误...我们编写了一个工具来执行这一操作——它只从声明文件中消除代码,这样任务最轻松。它不会重写或重定位代码——毕竟它不是打包器。这意味着发布的声明是 TypeScript 生成声明的一个不变子集。...减少发布类型的数量有几个优点: 它减少了与其他软件包的耦合(某些软件包不会从其依赖项中重新导出类型); 它防止了完全私有的类型泄漏,从而改善了封装; 它减少了需要用户下载和解压缩的已发布声明文件的数量和大小

    1.7K30

    深入理解 TypeScript 模块

    文件模块 ---- 只要一个 JavaScript 文件中包含 imports 导入模块 或者 exports 导出模块 的声明,那它就是一个模块,严谨点应该叫文件模块。.../ 导出接口 ▐ 6.2 导出语句 导出语句支持将需要导出的模块包装到一个对象中,并且支持对导出的部分重命名: import BaseComponent from "....,TypeScript 会优先选择 .ts 文件而不是 .d.ts 文件 非相对路径 非相对模块的导入,编译器则会从包含导入文件的目录开始依次向上级目录遍历,尝试定位匹配的声明文件。...,它就会尝试从rootDirs的所有子目录中导入。...,编译器在解析模块时可能访问当前文件夹外的文件,这会导致很难诊断模块为什么没有被解析,或解析到了错误的位置。

    2.5K30

    小记 TypeScript 中的循环引用问题

    随着项目规模的不断增长,循环引用问题似乎总是不可避免,本文就 TypeScript 中可能出现的循环引用问题做了一些简单记录~ 平时编写 TypeScript 代码时,一般都倾向于使用模块(Module...(尽管这个结果可能是不完整的),而不是递归的进行模块的导入操作,还是拿上面的代码举例,假设我们首先导入 A 模块: A 模块尝试导入 B 模块 由于 B 模块尚未导入,程序开始导入 B 模块 B 模块尝试导入...A 模块的导出数据中(export class A) A 模块尝试导入 C 模块 由于 C 模块尚未导入,所以我们开始导入 C 模块 C 模块尝试导入 B 模块 由于 B 模块尚未导入,所以我们开始导入...A 的定义, 类型 B 可以正常定义导出 B 模块将类型 B 加入到 B 模块的导出数据中(export class B) B 模块导入完成,继续 C 模块的导入 类型 C 继承 类型 B,尝试在当前...(B 模块)导入结果中访问类型 B 的定义 当前(B 模块)导入结果中存在类型 B 的定义, 类型 C 可以正常定义导出 C 模块导入完成, 继续 A 模块的导入 A 模块导入完成 但是如果我们尝试首先导入

    5.8K20

    如何将Node.js库转换到Deno

    它也有一个复杂的解析算法,会从node_modules加载像react这样的普通模块名,并在无额外扩展名导入时尝试添加.js或.json。...如果导入路径是一个目录,则导入index.js文件 Deno模块解析逻辑简化了很多。它使用了ECMAScript模块语法进行导入和导出。该语法也被TypeScript使用。...://deno.land/std@0.114.0/node/crypto.ts"; 为了简化问题,将所有Node.js api导入移到一个名为adapter.node.ts的文件中,并只重新导出我们需要的功能...虽然可以简单地从适配器导出这些变量,但我们必须重构Node.js文件以显式地导入它们。...首先检查路径是否对应于实际文件;如果失败了会尝试添加.ts;如果再失败则尝试添加/index.ts;如果再失败则抛出一个错误。 注入Node.js全局变量 最后一步是处理Node.js全局变量。

    2.4K30

    TypeScript 4.4 RC版来了,正式版将于月底发布

    如果你想现在就尝试 TypeScript 的 RC 版,可以通过 NuGet 获取,或者使用以下 npm 命令: npm install typescript@rc TypeScript 4.4 版本中的部分主要亮点包括别名条件与判别式的控制流分析...这些建议与 TypeScript 文件中的“Did you mean…?”形式完全相同。 拼写建议中的线索能够帮助您查找代码中的错误。我们也在测试中成功从现有代码中找出了不少错误!...间接调用导入函数以提升合规性 在其他早期版本中,从 CommonJS、AMD 以及其他非 ES 模块系统处执行的导入调用操作会设置所调用函数的 this 值。...// 假设这是我们导入的模块,它有一个名为'foo'的导出。...所以,我们才决定在 TypeScript 4.4 的导入函数调用中丢弃掉 this 值。 // 假设这是我们导入的模块,它有一个名为'foo'的导出。

    2.6K20

    Node.js项目TypeScript改造指南

    /node_modules/@types" ], "allowSyntheticDefaultImports": false, /* 允许从没有设置默认导出的模块中默认导入,仅用于提示...TypeScript的import问题 安装完 Node 的声明文件后,之前的写法:const path = require('path')在 require 处仍然会报错,不过这次不是 TypeScript...) 意思是不推荐这种导入写法,因为这种 commonjs 写法导出来的对象是 any,没有类型支持。...如果你用 import 导入的项目内的其他源文件,由于原先 commonjs 写法,会提示你文件“/path/to/project/src/mod.ts”不是模块。...所幸,tsconfig 提供了一个配置allowSyntheticDefaultImports,意思是允许从没有设置默认导出的模块中默认导入,需要注意的是,这个属性并不会对代码的生成有任何影响,仅仅是给出提示

    4.6K10

    Node.js 项目 TypeScript 改造指南

    /node_modules/@types" ], "allowSyntheticDefaultImports": false, /* 允许从没有设置默认导出的模块中默认导入,仅用于提示...TypeScript的import问题 安装完 Node 的声明文件后,之前的写法:const path = require('path')在 require 处仍然会报错,不过这次不是 TypeScript...) 意思是不推荐这种导入写法,因为这种 commonjs 写法导出来的对象是 any,没有类型支持。...如果你用 import 导入的项目内的其他源文件,由于原先 commonjs 写法,会提示你文件“/path/to/project/src/mod.ts”不是模块。...所幸,tsconfig 提供了一个配置allowSyntheticDefaultImports,意思是允许从没有设置默认导出的模块中默认导入,需要注意的是,这个属性并不会对代码的生成有任何影响,仅仅是给出提示

    8.4K32

    Node.js项目TypeScript改造指南

    /node_modules/@types" ], "allowSyntheticDefaultImports": false, /* 允许从没有设置默认导出的模块中默认导入,仅用于提示...TypeScript的import问题 安装完 Node 的声明文件后,之前的写法:const path = require('path')在 require 处仍然会报错,不过这次不是 TypeScript...) 意思是不推荐这种导入写法,因为这种 commonjs 写法导出来的对象是 any,没有类型支持。...如果你用 import 导入的项目内的其他源文件,由于原先 commonjs 写法,会提示你文件“/path/to/project/src/mod.ts”不是模块。...所幸,tsconfig 提供了一个配置allowSyntheticDefaultImports,意思是允许从没有设置默认导出的模块中默认导入,需要注意的是,这个属性并不会对代码的生成有任何影响,仅仅是给出提示

    4.4K20

    去除typescript代码类型

    ,抛出错误 "noUnusedParameters": true, // 有未使用的参数时,抛出错误 "noImplicitReturns": true, // 并不是所有函数里的代码都有返回值时..."types": [], // 需要包含的类型声明文件名列表 "allowSyntheticDefaultImports": true, // 允许从没有设置默认导出的模块中默认导入。...TypeScript 文件而不是源文件的位置 "mapRoot": "./", // 指定调试器应该找到映射文件而不是生成文件的位置 "inlineSourceMap": true,...,总结的太好了,以至于我都不是很想再写一遍主要的配置 会写 TypeScript 但你真的会 TS 编译配置吗?...- 掘金 (juejin.cn) 话虽说,但一些主要的功能还是得写一下 配置别名​ 在一些项目中经常能看到导入模块不是使用相对路径.

    2.6K10

    VUE3TSTSX入门手册指北

    /联合类型/字面量类型/类型推论等纲要、联合枚举类型:从C语言看枚举与联合类型到TypeScript/Python装饰器:《Typescript装饰器Decorators浅析》、从java注解漫谈到typescript...装饰器——注解与装饰器泛型:《从java泛型来聊typescript泛型变量和泛型》图书推荐:TSX入门手册.jsx是javascript文件并表明使用了JSX语法。....如何学习JSX先看官方文档:https://zh-hans.reactjs.org/docs/introducing-jsx.htmlhttps://zh-hans.reactjs.org/docs/jsx-in-depth.htmlVUE3...+TSXVue一直都是支持JSX语法的,3.0对TypeScript的支持又非常好,所以我开始尝试用Vue + TSX来做开发。...多个子节点是以数组的形式传入,而不是像React那样作为分开的参数案例代码:https://github.com/TencentBlueKing/bkui-vue3https://github.com/

    1.4K11

    你不知道的 「 import type 」

    背景 TypeScript 3.8 带来了一个新特性:仅仅导入 / 导出声明。 在 上一篇文章 中, 我们使用了这个特性,解决了: 引入类型文件报文件不存在的问题。...什么是「 仅仅导入 / 导出声明 」 为了能导入类型,TypeScript 重用了 JavaScript 的导入语法。.../service.js 中的代码不会被执行,导致在运行时会被中断。 在 TypeScript 3.8 版本中,我们添加了一个仅仅导入/导出 声明语法来作为解决方式。...当使用 import type 导入一个类时,你不能做类似于从它继承的操作。...从Node 的角度来看,Node 做模块解析时,会发现 types.js 中引入的文件是空的,报错:文件不存在。 如截图所示,tsc 类型检查过程立即将这些模糊的重新导出报告为错误。 2.

    4.3K61

    最全面的 Deno 入门教程

    但是 Deno 不是 Node.js,而是全新的 JavaScript 运行时,同时也支持 TypeScript。...Deno 的标准库 Deno 带有一组实用函数,这些函数被称为 Deno 的标准库(简称:Deno std)。Deno 并没有从外部库中导入所有内容,而是尝试通过提供几种内部解决方案来使其可用。...在 Deno 中,所有库导入(无论是从标准库还是从第三方库)均使用指向专用文件的绝对路径来完成。你从这个 以服务器文件形式存在的 http 库[5] 导出一个名为served的函数。...如果你再次从浏览器的最后一部分中检查结果,可能会注意到 createdAt 的格式对人类很不友好,我们将用 date-fns[8] 库来使其可读: Deno 中的库通过绝对路径直接从 Web 导入。...这些新的 TypeScript 文件并不是都需要添加类型或接口,因为大多数类型是自动推导的。

    3.5K10

    VUE3TSTSX入门手册指北

    /联合类型/字面量类型/类型推论等纲要、联合枚举类型:从C语言看枚举与联合类型到TypeScript/Python装饰器:《Typescript装饰器Decorators浅析》、从java注解漫谈到typescript...装饰器——注解与装饰器泛型:《从java泛型来聊typescript泛型变量和泛型》图书推荐:图片TSX入门手册.jsx是javascript文件并表明使用了JSX语法。....如何学习JSX先看官方文档:https://zh-hans.reactjs.org/docs/introducing-jsx.htmlhttps://zh-hans.reactjs.org/docs/jsx-in-depth.htmlVUE3...+TSXVue一直都是支持JSX语法的,3.0对TypeScript的支持又非常好,所以我开始尝试用Vue + TSX来做开发。...多个子节点是以数组的形式传入,而不是像React那样作为分开的参数案例代码:https://github.com/TencentBlueKing/bkui-vue3https://github.com/

    93910

    TypeScript 5.0 正式发布!

    allowArbitraryExtensions 在 TypeScript 5.0 中,当导入路径以不是已知 JavaScript 或 TypeScript 文件扩展名的扩展名结尾时,编译器将以 {file.../car 导出的值,将得到一个运行时错误。但对于某些边界情况,它确实增加了一层复杂性。例如,没有像 import "..../car"; 类型修饰符本身并不是很有用——默认情况下,模块省略仍然会删除导入,并且没有强制区分类型和普通导入和导出。...在此标志下,当设置或文件扩展名暗示不同的模块系统时,ECMAScript 导入和导出不会被重写为 require 调用。相反,会得到一个错误。..., 123); // ❌ 编辑器中不区分大小写的导入排序 在 Visual Studio 和 VS Code 等编辑器中,TypeScript 支持组织和排序导入和导出的体验。

    3.9K70

    【TypeScript】014-工程相关

    而 TypeScript 已经能够在编译阶段检查出很多问题了,为什么还需要代码检查呢? 因为 TypeScript 关注的重心是类型的检查,而不是代码风格。...当运行 ESLint 的时候检查一个文件的时候,它会首先尝试读取该文件的目录下的配置文件,然后再一级一级往上查找,将所找到的配置合并起来,作为当前被检查文件的配置。...): 选项 类型 默认值 描述 allowJs boolean false 允许编译 js 文件 allowSyntheticDefaultImports boolean false 允许对不包含默认导出的模块使用默认导入...── foo.js │ └── index.ts ├── package.json └── tsconfig.json allowSyntheticDefaultImports 允许对不包含默认导出的模块使用默认导入...当它设置为 true 时,允许使用 import foo from 'foo' 来导入一个通过 export = foo 导出的模块。当它设置为 false 时,则不允许,会报错。

    10110
    领券