控制打字稿中的类型级别“评估”

时间:2020-06-08 12:47:33

标签: typescript

我正在编写一个开放源代码TypeScript库,该库将在NPM上发布。我正在寻找一些可能使我的图书馆对其用户更有用的“黑客”。

例如,某些库函数将包含一些非平凡的类型操作。一个例子是

export type UndefinedOptional<A> =
  { [P in keyof A]?: A[P] } &
  { [L in { [K in keyof A]: undefined extends A[K] ? never : K }[keyof A]]: A[L] }

旨在使对象中可能未定义的键成为可选。

我的问题是,这会导致推断出的类型签名,例如

const myThing: Thing<UndefinedOptional<...>> = ...

其中UndefinedOptional操作“泄漏”到“用户空间”。我宁愿了解这是什么,也不要给图书馆用户带来不必要的负担。

我想要的是将这种类型级别的函数的求值“强制”(类似于您如何在懒惰求值中强加给它。)变成要返回的UndefinedOptional类型。

我还想强制打字稿将{ foo: number } & { bar: string }之类的类型评估为{ foo: number, bar: string },如果有任何破解方法可能对此有所帮助。

如果实现此目标的方法有点“ hacky”(没问题),那是很好的,例如,我的意思是指依赖未明确标准化的行为,并且可能在版本之间进行更改等。

Here's一个操场,上面有一些我定义的简化示例

0 个答案:

没有答案