Any/Variant类型的类型理论



假设我有一个类型系统,除了null值之外,还有三个基本类型:

  • bool
  • num
  • string

此外,每种类型都有一个类型数组,所以我们现在有:nullbool,bool[],num,num[],stringstring[]作为我们所有的类型。

最后,我们有一个Any类型,它可以包含任何其他类型。例如,我们可能有两个这样的列:

<表类> id (num) 价值(任何) tbody><<tr>1"abc"2(1、2、3)3[1,真正]??

具有(可能是不自然的)限制的类型系统仍然是类型系统。

您所列出的任何可能性都可以为其定义语法、完全指定和实现。你甚至可以做其他的事情,比如只允许递归到一个固定的深度,或者有单独的锯齿和非锯齿嵌套数组类型。

对于类型系统是否能以上述任何一种方式工作的问题,答案都是肯定的。

如果您自己决定类型系统,那么问题就变成是否应该允许any[],以及any是否应该允许嵌套数组。这个问题的答案取决于您使用类型系统的原因。对于所有的情况,没有一个最好的答案。

我从来没有处理过理论问题,但是通过处理编程,我会说以下内容:我们有类型null, bool, num, string。其他一切都将由此产生。例如any = (null || bool || num || string)。另一方面,数组不是类型,而是类型的组织形式。如果我从外部看这个['aaa','bbv'],我会说它是一个数组,但要知道它是什么类型,我必须看到它的内部。如果所有的内部元素都是相同的类型,那么我们可以说我们有一个类型为String的数组,否则我们有一个类型为any的数组。因此,由于数组不是一种类型,而是一种组织形式,因此对于任意类型

也是必要的。