Typescript条件类型区分索引类型与对象

Typescript条件类型区分索引类型与对象,typescript,Typescript,我正在创建一个typescript验证库。这个库的承诺是验证模式是类型安全的,这意味着验证对象的类型是从原始对象派生的 作为其中的一部分,模式定义如下: export type Schema<T, R = T> = T extends string ? StringSchema<R> : T extends number ? NumberSchema : T extends D

我正在创建一个typescript验证库。这个库的承诺是验证模式是类型安全的,这意味着验证对象的类型是从原始对象派生的

作为其中的一部分,模式定义如下:

export type Schema<T, R = T> = T extends string ? StringSchema<R> :
                        T extends number ? NumberSchema :
                        T extends Date ? DateSchema :
                        T extends boolean ? BooleanSchema :
                        T extends Array<infer E> ? ArraySchema<E, R> : 
                        T extends [infer U, ...unknown[]] ? TupleSchema<U> :
  // T extends {[key:string], infer V} ? MapSchema<V, R> :  // not working
                        T extends object ? ObjectSchema<T, R> :
                        never;
导出类型Schema=T扩展字符串?StringSchema:
T扩展数字?数字模式:
T延长日期?日期架构:
T扩展布尔?布尔模式:
T扩展数组?ArraySchema:
T扩展[推断U,…未知[]?TupleSchema:
//T扩展{[key:string],推断V}?MapSchema://不工作
T扩展对象?ObjectSchema:
从未;
代码在这里

基本上,模式是根据类型选择的。在切换类型时,我想区分b/w
{[key:string],推断V}
T扩展对象
(或静态定义了类型的实际类型,但我找不到一种方法

索引类型和普通类型都匹配
T extends{[key:string]、推断V}
T extends object

感谢您的帮助

谢谢