我应该如何从一个包中导出多组类/接口

Posted

技术标签:

【中文标题】我应该如何从一个包中导出多组类/接口【英文标题】:How should I export multiple groups of classes/interfaces from a package 【发布时间】:2020-09-03 21:59:09 【问题描述】:

我有一个打字稿包,其中有 2 组类/接口:writeAPI 和 readAPI。 两个 API 都有同名的类,例如有一个可写的“节点”和一个可读的“节点”。

我想阻止在类的名称中添加组,例如:'WritableNode'、'ReadableNode'。

是否可以创建一个可以被另一个包使用的包,如下所示: 1)

import * as myAPIs from "myAPIs"

const readableNode = new myAPIs.readable.Node()
const writableNode = new myAPIs.writable.Node()

或者(不太推荐): 2)

import * as myReadableAPI from "myAPIs/readable"
import * as myWritableAPI from "myAPIs/writable"

const readableNode = new myReadableAPIs.Node()
const writableNode = new myWritableAPIs.Node()

编辑:

这似乎有效(专门针对我的包裹):

import * as myReadableAPI from "myAPIs/dist/src/readable

我觉得它又丑又长,我想去掉多余的目录。我更喜欢上面的第一个选项。

【问题讨论】:

【参考方案1】:

在(最好)两个文件 /readable.ts/writeable.ts 中声明您的 api,然后在您想要的命名空间下的 /apiEntry.ts 文件中重新导出它们。

import * as _writable from "./writeable"
import * as _readable from "./readable"


export const writeable = _writable
export const readable = _readable

是的,这看起来有点脏,将你的模块重新声明为常量,但语法 export * as namespace from "./module" 不起作用。无论如何,我相信像 terser 这样的缩小器可以解决这个问题。

Sandbox

【讨论】:

谢谢!我已经对其进行了测试,它适用于类和函数。但是对于类型和接口,它不起作用。 @Coen 使用export type nameOfType = _nameOfType 我不知道怎么做。我已经在模块中这样做了,我不能在模块之外这样做,因为那样会与其他模块/组的接口/类型冲突【参考方案2】:

与@MaximilianMairinger 写的相反,export * as myNamespace from "./module" 实际上对我有用。

【讨论】:

以上是关于我应该如何从一个包中导出多组类/接口的主要内容,如果未能解决你的问题,请参考以下文章

如何配置 Python 以便我可以直接从包中导入函数?

如何在eclipse中导入vtk包

如何从 Eclipse 中导入包?

Symfony 2 如何从另一个包中导入 LESS 文件

AndroidStudio 项目中导入jar包及so包

如何从 typescript 项目中导入 npm 包?