此处处理此问题的一些附加信息:
但是,这是我刚刚经历的一个序列,这似乎意味着如果该类使用角度特征(输入等),则无法为指令创建抽象基类。需要进行重构。
- 有一个组件使用的基类。它是抽象的并使用角度特征。
- 进行了升级,看到添加了空指令。
- 不会编译。指令中需要的元数据 obj。
- 查看文档(Angular.io),说用空白选择器添加数据。
我做了所有这些,即使 TS lint 为空白选择器哭泣,我用 tslint:disable... 关闭了它。
...虽然不再显示为 lint 错误,但现在显示为构建错误(实际上是说,“请添加它!”)。所以我添加了一个选择器,它带有一些永远不会被使用的概念,因为该类是抽象的。
但...
...该类以前未添加到模块中。我没有编写原始代码,并且很惊讶这从未出现在 --prod 构建中,但是阅读了以前的图形引擎,我发现它是宽容的,因为它具有全局可见性。但是 Ivy 没有,它是独立编译的,所以你需要我放的装饰器,然后就出现了 no-module 错误。所以我将它添加到相关模块中。
...没有利润。“不能将抽象构造函数添加到非抽象构造函数。” 换句话说,我猜你不能在模块中声明一个抽象类(至少,不是通常的“只是将它添加到声明中”的方式)。
所以最终,没有考虑重构相当复杂的组件层次结构,我只是从类定义中删除了抽象。
然而,这个序列确实邀请了直接使用该基类并通过其选择器的机会。这不是框架强迫你进入的好状态。
我摆弄了一下,但找不到直接绕过它的方法。
所以在这里扩展答案:
“如果抽象类使用角度特性,你似乎不能拥有它们,因为如果你使用这些特性,你必须在类上使用角度装饰器,这意味着它必须在模块中声明,这禁止声明抽象类。”
(即使文档说“你可以将选择器留空”,除非你想调整你的规则,似乎你不能)。