如何导出从另一个文件导入的流类型定义?

Posted

技术标签:

【中文标题】如何导出从另一个文件导入的流类型定义?【英文标题】:How do you export a Flow type definition that is imported from another file? 【发布时间】:2015-12-12 16:58:09 【问题描述】:

给定一个从另一个模块导入的类型定义,你如何重新导出它?

/**
 * @flow
 */

import type * as ExampleType from './ExampleType';

...

// What is the syntax for exporting the type?
// export  ExampleType ;

【问题讨论】:

你可以写import type * as ExampleType from './ExampleType';而不是import type ExampleType from './ExampleType'; 【参考方案1】:

以下效果很好

export type  Type  from './types';

【讨论】:

【参考方案2】:

我刚刚发现需要单线来为 ES6 默认类执行此操作,基于 @locropulenton 的答案。假设你有

// @flow

export default class Restaurants 

Restaurants.js 文件中。要从同一目录中的 index.js 文件中导出它,请执行以下操作:

export type default as Restaurants from './Restaurants';

【讨论】:

【参考方案3】:

接受的答案是旧的,并且对我提出警告。鉴于观看次数,这是与 flow 0.10+ 兼容的更新答案。

MyTypes.js:

  export type UserID = number;
  export type User = 
    id: UserID,
    firstName: string,
    lastName: string
  ;

用户.js:

  import type UserID, User from "MyTypes";

  function getUserID(user: User): UserID 
    return user.id;
  

source

【讨论】:

【参考方案4】:

这个问题的最简单形式是“如何导出类型别名?”简单的答案是“export type!”

对于你的例子,你可以写

/**
 * @flow
 */

import type * as ExampleType from './ExampleType';
export type  ExampleType ;

你可能会问“为什么ExampleType 是一个类型别名?”好吧,当你写的时候

type MyTypeAlias = number;

您正在显式创建别名MyTypeAlias 的类型别名number。当你写的时候

import type  YourTypeAlias  from './YourModule';

您正在隐式创建类型别名YourTypeAlias,它为YourModule.jsYourTypeAlias 导出别名。

【讨论】:

但是如何在一行中轻松地重新导出所有类型? 根据这篇文章,export type ExampleType 不是受支持的语法。 flowtype.org/blog/2015/02/18/Import-Types.html帖子里的信息是不是过期了?此语法记录在哪里? flowtype.org/docs/modules.html 中也没有记录。 仅供参考,我已经向 Babel github.com/babel/babel/issues/5538 填写了关于 babel-plugin-transform-flow-comments 的相关问题。 备案:@Gajus 链接到的页面底部有该语法的公告。我尝试了(Flow 0.46)并且它有效,该博客文章很旧。 注意:export type * from './foo' 似乎不起作用。

以上是关于如何导出从另一个文件导入的流类型定义?的主要内容,如果未能解决你的问题,请参考以下文章

将 MS Access 表定义导出和导入为文本文件

无需导入即可使用类型和接口

如何在打字稿中正确导入自定义类型

typeScript声明文件的一个注意点:不能使用导入导出语法

oracle数据库导出是出现的问题

在导出函数的命名空间中使用自定义类型