我应该如何从一个包中导出多组类/接口
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"
实际上对我有用。
【讨论】:
以上是关于我应该如何从一个包中导出多组类/接口的主要内容,如果未能解决你的问题,请参考以下文章