typescript VSCode类型预览不是简化类型

ss2ws0br  于 2022-12-24  发布在  TypeScript
关注(0)|答案(1)|浏览(112)

我有一个相当复杂的类型派生自另一个类型。在类型声明和类型注解中,类型是正确派生的:

但是,当悬停在指定类型的实际JS变量上时,类型不会简化,而是弹出窗口显示所有应用的类型修饰符的链:

有没有办法强制VSCode总是显示简化类型?
TS版本:4.6.2 VSC版本:1.65.1

zi8p0yeb

zi8p0yeb1#

目前还没有办法改变VS代码在悬停时显示的类型,但是您可以定义一个标识类型来摆脱所有类型应用程序。
下面是一个递归函数,它也能正确地处理函数:

// 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 }

类型Normalize<User>应该在悬停时显示规范化的User类型,其他版本的Normalize(通常称为Expand)也是可能的,这取决于您是只想规范化顶级还是递归规范化,以及您是否需要处理函数属性。
TypeScript playground

相关问题