假设我有一个类型系统,除了null
值之外,还有三个基本类型:
- 空
bool
num
string
此外,每种类型都有一个类型数组,所以我们现在有:null,bool
,bool[]
,num
,num[]
,string
和string[]
作为我们所有的类型。
最后,我们有一个Any
类型,它可以包含任何其他类型。例如,我们可能有两个这样的列:
具有(可能是不自然的)限制的类型系统仍然是类型系统。
您所列出的任何可能性都可以为其定义语法、完全指定和实现。你甚至可以做其他的事情,比如只允许递归到一个固定的深度,或者有单独的锯齿和非锯齿嵌套数组类型。
对于类型系统是否能以上述任何一种方式工作的问题,答案都是肯定的。
如果您自己决定类型系统,那么问题就变成是否应该允许any[]
,以及any
是否应该允许嵌套数组。这个问题的答案取决于您使用类型系统的原因。对于所有的情况,没有一个最好的答案。
我从来没有处理过理论问题,但是通过处理编程,我会说以下内容:我们有类型null, bool, num, string。其他一切都将由此产生。例如any = (null || bool || num || string)。另一方面,数组不是类型,而是类型的组织形式。如果我从外部看这个['aaa','bbv'],我会说它是一个数组,但要知道它是什么类型,我必须看到它的内部。如果所有的内部元素都是相同的类型,那么我们可以说我们有一个类型为String的数组,否则我们有一个类型为any的数组。因此,由于数组不是一种类型,而是一种组织形式,因此对于任意类型
也是必要的。