假设我有两个事物的继承树,X
类型和Y
类型,每个都有各自的子类型集合。
所有X
类型的项目都具有“匹配” Y
类型,其中给定X
类型的匹配Y
类型和超类型可以应用于/存储在X
的实例。
X Inheritance Y Inheritance
Tree Tree
X1 Y1
|-X1.1 |-Y1.1
| |-X1.1.1 | |-Y1.1.1
| \-X1.1.2 | \-Y1.1.2
\-X1.2 \-Y1.2
|-X1.2.1 |-Y1.2.1
\-X1.2.2 \-Y1.2.2
因此,实际上,对于类型为X1.2.1
的实例,可以使用Y1.2.1
,Y1.2
或Y1
的实例(请考虑:通用下限)。 / p>
这是问题的第一部分,但是对于第二部分(一旦我们确保仅可以应用适用的类型),我们现在需要能够检索正确类型的Y
实例X
类型的实例。
TypeScript的类型系统非常灵活,这使我感到有些可能,但是我自己却无法弄清楚。
到目前为止,我采用的系统中Y
类型不会彼此继承,而是全部单独实现非常通用的接口。问题是Y
类型通常采用不同的参数,其中一种Y
类型可能仅依赖于一个string
,而另一种类型可能采用number, number, string
。使用非常通用的接口,每个实现都被强制采用string
作为参数,然后从string
解析正确的参数,如果字符串不包含正确的信息,则会引发错误。
(举例来说),我可以将Y1.2
的新实例添加到X1.2.2
中,并且以后可以执行类似以下操作的类型:get Y1.2 from X1.2.2 and set parameter #2 to 236
安全的方式,这样不仅可以正确地进行类型检查,而且还可以使我的IDE为我提供类型信息。
我什至不确定我要问的事情是否可能实现,但是任何对正确方向的帮助或指导将不胜感激。