【问题标题】:TypeScript - export default asTypeScript - 导出默认为
【发布时间】:2020-04-30 09:53:47
【问题描述】:

在 TypeScript 中处理 react 应用程序。

我正在尝试了解使用 as 导出默认组件的正确语法

到现在我都用过:

class HomePage extends Component<IProps, IState> {
   ...
}

export default HomePage

或很快:

export default class HomePage extends Component<IProps, IState> {
   ...
}

现在,在添加了 redux 支持之后。我有类似的东西:

class HomePage extends Component<IProps, IState> {
   ...
}

const mapStateToProps = (state: StoreState) => {
   ...
};

const mapDispatchToProps = {
   ...
};

export default connect(mapStateToProps, mapDispatchToProps)(HomePage);

但我不知道如何将as 添加到连接默认导出 例如:

// This is NOT working. I get Syntax error.
export default connect(mapStateToProps, mapDispatchToProps)(HomePage) as HomePage;

有可能吗?还是我应该这样做?似乎无论如何导出名称都是HomePage(当我在其他文件中导入HomePage时,IDE会自动检测并导入此文件)。它是从哪里取来的?文件名(HomePage.tsx)?

这对我有用:

const connectedHomePage = connect(mapStateToProps, mapDispatchToProps)(HomePage)
export {connectedHomePage as HomePage};

但它是两行(我更喜欢一行)而且它不是默认导出。

那么,有没有办法将export defaultas 添加到语句中?只是为了清楚导出的名称是什么?

【问题讨论】:

  • export default 始终导出为 default。您希望使用此语法得到什么?
  • @Cerberus 了解如何确保当我从另一个文件导入此文件时,IDE 会将此导出识别为HomePage 并能够自动导入它(它实际上是这样做的!)我理解为什么 IDE 可以将 export default class HomePage 识别为主页(import HomePage from './HomePage'),但是当我在另一个文件中写入 HomePage 时不确定它如何也适用于 export default connect(mapStateToProps, mapDispatchToProps)(HomePage);,IDE 可以找到它并自动导入它.所以我想也许它知道我想通过文件名导入哪个默认值?
  • 那么它似乎依赖于IDE,但它可能可以使用文件名或识别一些常见的习语。在您的情况下是否需要使用 export default .. 而不是例如export const HomePage = ...?
  • @Cerberus 谢谢。不,这只是因为我很好奇事情是如何运作的,而且 import HomePage from './HomePage' 看起来比 import {HomePage} from './HomePage' 更好

标签: reactjs typescript


【解决方案1】:

as 有 2 个含义。在 ES6 模块中,它可以是一种重命名导入或导出的方法。在 TypeScript 中,它是一个类型转换运算符。我假设您的意思是第一个,特别是重命名导出的方法。

现在看看你建议的这个表达式:

export default connect(mapStateToProps, mapDispatchToProps)(HomePage) as HomePage;

要将其导出为default 还是要将其导出为HomePage?导出默认值时,default 是导出名称。鉴于此,期望它被称为HomePage 是否有意义?您要么导出名为 default 的内容,要么导出名为 HomePage 的内容。

此表将不同的导出语句形式与预期的导出名称和本地名称相关联:

对于导入,不过...

  • 如果您要导入默认导出,则必须明确命名导入。默认导出在导入后不会自动具有本地名称。示例:import express from "express"。本地名称无关紧要。也可以是import banana from "express"
  • 如果您正在导入命名导出,默认情况下,本地名称将与导出名称相同。示例:如果您有export const x = 2,那么您应该将其导入为import { x } from "module"。您也可以像这样重命名导入:`import { x as y } from "module"。

以上表格来自 ES6 规范:http://www.ecma-international.org/ecma-262/6.0/

【讨论】:

  • 感谢您提供详细而丰富的信息。我不明白的是 - 当您导出为默认值(导出名称为“默认”)时,当 IDE 自动将其导入另一个文件时,它如何将其导入为HomePage(例如import HomePage from './HomePage')而不是默认值(import default from './HomePage')。默认导出是否始终由 IDE 作为文件名导入?
  • @ET-CS,我在答案中添加了第二部分,其中解释了导入的工作原理。基本上,对于default exports,您可以在导入它们时随意命名。
猜你喜欢
  • 2022-12-07
  • 2021-06-01
  • 2017-02-01
  • 1970-01-01
  • 2019-04-02
  • 2017-11-12
  • 2019-04-03
  • 2019-09-16
  • 1970-01-01
相关资源
最近更新 更多