gpt4 book ai didi

inheritance - TypeScript - 更改 child 的属性类型,这可能吗?

转载 作者:搜寻专家 更新时间:2023-10-30 20:32:22 25 4
gpt4 key购买 nike

我有一个类Manager :

class Manager{
/**
* Elements that are managed by the manager.
*/
private _elements: PIXI.DisplayObject[];

和一个类(class) TextureManager它扩展了 Manager :
export class TextureManager extends Game.Managers.Manager{
private _elements: PIXI.DisplayObjectContainer[];
}

让你知道, PIXI.DisplayObjectContainer扩展 PIXI.DisplayObject .

我相信因为它是相同的类型(基于相同的对象: PIXI.DisplayObject ),所以类型更改应该是可能的。 (如果我没记错的话,至少它是真正的 OOP 语言,比如 Java)

但是我在编译过程中收到此错误消息。我应该怎么做?

TextureManager.ts(9,18): error TS2416: Class 'TextureManager' incorrectly extends base class 'Manager':
Types have separate declarations of a private property '_elements'.



解决方案:

这似乎是一个简单的解决方案,但 TS 1.3 3 天前刚刚发布并添加对 - 真正想要的 - protected 的支持属性。它似乎适用于 protected属性更改类型确实可以正常工作,我只是设置了 protected _elements: any;Manager父类并根据需要在任何 child 中自定义类型 protected _elements: Game.Core.Texture; .很酷。

由于我的 IDE (WebStorm) 还没有发布对 TS 1.3 的支持,但通过检查 Trigger watcher regardless of syntax error,我到处都变红了。在 File watcher我能够让它发挥作用。即将支持: https://youtrack.jetbrains.com/issue/WEB-14149

最佳答案

您不能在 TypeScript 中覆盖私有(private)类成员。在前几天发布的 1.3 版本之前,TS 中只有 2 个可访问性修饰符:privatepublic ,所以这里唯一的解决方案是使用 public .

它在 1.3 版本中发生了变化。虽然私有(private)成员仍然不能被覆盖,但 TS 1.3 引入了 protected可访问性修饰符。它仍然阻止在类外部访问该属性,但是它允许在子类中访问成员,这与问题更相关,允许覆盖 (但覆盖的属性类型仍然必须分配给被覆盖的属性)。

所以在这种情况下,只需使用 TypeScript 1.3,制作 _elements protected 并给它一个可以被覆盖的类型。

关于inheritance - TypeScript - 更改 child 的属性类型,这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26947176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com