我正在使用TS 3.5.1,对于复杂的映射类型,存在“类型实例化过深,甚至可能是无限的”问题。
我已经奋斗了几天,试图以我对问题的最佳理解来优化类型。
TypeScript何时何地计算类型实例化?是否每次都涉及泛型类型?它是否还将所有类型都包含在映射通用类型的并集结果中?它会在通用类型映射中计算所有“条件”,还是仅在匹配之前计算?将X类型的并集作为通用类型的参数算作X类型实例化还是1类型实例化?
背景信息:
有问题的类型有些相似,并且受JSON模式的启发。它将模式声明映射为具体类型,因此在损害其核心功能之前我可以摆脱多少复杂度是有限制的。
这是一个声明示例:
const someDeclaration = {
type: 'Object'
required: true
additionalProperties: false
trim: false
properties: {
prop1: {
type: 'Object'
required: true
additionalProperties: false
trim: true
properties: {
prop2: {
type: 'Array'
required: false
items: { type: 'Number' }
}
}
}
}
} as const
此类型的结果:
{
readonly prop1: {
readonly prop2?: ReadonlyArray<number> | undefined;
}
}