将TS切换到目标ES2015,得到名为exports

时间:2018-06-06 04:22:11

标签: typescript

我很乐意将我的一个Typescript库发送到CJS一段时间,但我决定要转发到ES2015以获得更多的树木震动。无论如何,我突然遇到了一些我以前从未见过的错误。他们中的许多人都是可以理解和有帮助的,但我留下了一些我无法理解的错误案例。这是一个例子:

  

错误TS4043:来自导出类的公共getter'db'的返回类型具有或正在使用私有名称'RealTimeDB'。

在这种情况下,被抱怨的代码如下所示:

public get db() {
  return this._db;
}

确实_db的TYPE是:

private _db: RealTimeDB;

我的假设是暗示类型RealTimeDB是私有的。它不是;它是公开出口的。它不仅可以从暴露它中获取模块,而且我也将它直接暴露在这个包中。我误解了错误吗?

  

错误TS4041:从导出的类返回公共getter'关系'的类型已经或正在使用来自外部模块“/ Users / xxx / mine / forest-fire / firemodel / src / decorators / schema”的名称'ISchemaRelationshipMetaProperties'但不能被命名。

在这种情况下,它变得更奇怪,因为不仅导出了ISchemaRelationshipMetaProperties,而且它被导出为该项目的一部分(注意:这是“firemodel”项目)。以下是一些代码片段,以进一步证明这一点:

public get relationships() {
  return this._schema.META.relationships;
}

_schema属性:

protected _schema: T;

T延伸BaseSchema,其中指出:

public META?: Partial<ISchemaOptions>;

然后ISchemaOptions包括:

relationships?: ISchemaRelationshipMetaProperties[];

这可以在本地找到:

export interface ISchemaRelationshipMetaProperties extends ISchemaMetaProperties {
  isRelationship: true;
  isProperty: false;
  relType: ISchemaRelationshipType;
}

对不起,这个链有点长,但关键是所有的依赖关系都是包外部的本地,如错误所示。它们也全部作为包的一部分出口。

完整的来源可以在这里找到:

抛出第一个错误的

List Class

更新

我找到了摆脱错误的方法,但我仍然不知道为什么我会得到错误。在上面的示例中,我使用私有名称收到有关'RealTimeDB'的错误...我只需更改为:

protected get db(): RealTimeDB {
  return this._model.db;
}

请注意,唯一的变化是我明确说明了getter中的返回类型,并明确说明了它已隐含的内容。这与我在所有其他错误中使用的模式相同,但结果相同。我想我现在好了,但我真的很想听听别人为什么会这样。它感觉就像是TypeScript中的一个错误。

1 个答案:

答案 0 :(得分:0)

  

不是;它是公开出口的。

还必须从显示此错误的文件中导出。添加:

export {RealTimeDB}

更多

  • 您目前只是导入该文件。