主要观点:
- 存在类型可用于隐藏类型变量,实现抽象数据类型等,这里用于对解析后的原始结构进行类型标注。
- TypeScript 本身不直接支持存在类型,但可通过通用量化类型来编码。
- 用存在类型解决从未知原始数据中解析出特定类型数组的问题,客户端可在一定约束下操作数组。
关键信息:
- 存在类型定义如
type ArrayE = ∃T.Array<T>
,隐藏了类型变量T
。 - 编码后的
ArrayE = <R>(cont: <T>(ts: Array<T>) => R) => R
,表示接受一个延续函数并返回其结果。 parseRawArrayE
函数通过判断数组长度来解析原始数据为ArrayE
,成功时表示数组元素为同一未知类型T
。
重要细节:
- 直接的
function parseRawArray<T>(xs: unknown[]): Array<T>
存在问题,仅有一种空元组的实例。 parseRawArrayE
函数在解析成功时,客户端可操作数组,但不能随意添加任意类型元素。- 可在Playground中进行存在类型的实验。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。