// Normalize type by recursively applying any type aliases and merging explicit intersections.
type Normalize<T> =
T extends (...args: infer A) => infer R
? (...args: Normalize<A>) => Normalize<R>
: {[K in keyof T]: Normalize<T[K]>}
例如:
type A = { a: string }
type B = { b: number }
type NotNormalized = A & B // inferred type: A & B
type Normalized = Normalize<NotNormalized> // inferred type: { a: string, b: number }
1条答案
按热度按时间zi8p0yeb1#
目前还没有办法改变VS代码在悬停时显示的类型,但是您可以定义一个标识类型来摆脱所有类型应用程序。
下面是一个递归函数,它也能正确地处理函数:
例如:
类型
Normalize<User>
应该在悬停时显示规范化的User
类型,其他版本的Normalize
(通常称为Expand
)也是可能的,这取决于您是只想规范化顶级还是递归规范化,以及您是否需要处理函数属性。TypeScript playground