我很乐意将我的一个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;
}
对不起,这个链有点长,但关键是所有的依赖关系都是包
完整的来源可以在这里找到:
抛出第一个错误的我找到了摆脱错误的方法,但我仍然不知道为什么我会得到错误。在上面的示例中,我使用私有名称收到有关'RealTimeDB'的错误...我只需更改为:
protected get db(): RealTimeDB {
return this._model.db;
}
请注意,唯一的变化是我明确说明了getter中的返回类型,并明确说明了它已隐含的内容。这与我在所有其他错误中使用的模式相同,但结果相同。我想我现在好了,但我真的很想听听别人为什么会这样。它感觉就像是TypeScript中的一个错误。
答案 0 :(得分:0)
不是;它是公开出口的。
还必须从显示此错误的文件中导出。添加:
export {RealTimeDB}