如何在TypeScript中分解交叉类型?

时间:2018-05-04 08:48:08

标签: typescript

是否可以在TypeScript中分解交叉类型?是的,我知道它可以用联合类型完成,但我认为我不能在有趣的类型上使用Exclude<,>(我已经尝试了它并且它不起作用)。例如:

File1.ts - 我的系统文件。

namespace A {
   class $PrivateTypeA { }
   export var TypeA: typeof $PrivateTypeA & { Func(a:string):any } = <any>$PrivateTypeA;
}

File2.ts - 其他一些开发者使用我的文件。

namespace B {
   class $PrivateTypeB extends <Exclude<typeof A.TypeA, Func(a:any)=>any>><any>A.TypeA { } // (YES, I know this won't work, but it gives you the idea)
   export var TypeB: typeof $PrivateTypeB & { Func(a:number):any } = <any>$PrivateTypeB;
}

目标是:

  1. 不直接暴露私有类类型(我不希望代码完成来获取它们)。
  2. 从导出的值中删除添加的类型,以便我可以取回原始类型(否则,Func的不同签名将叠加)。
  3. 当然,在分解类型之后,我需要原始类型,包括所有构造函数签名(如果有的话)。
  4. 是的,有很多解决方法,例如将原始类型存储在另一个属性中(只需添加& {__originalType: typeof $TheType}),或者在属性名称上使用exclude<,>并重建类型签名,同时丢失原始构造函数签名,但那不是我想要的。我只是想知道它是否可以完成,如何,或者只是说不。 ;)我希望我在最新版本中遗漏了一些我不知道的新内容(我浏览了发行说明,只有exclude接近,但它似乎只适用于联合类型) 。我也对其他想法持开放态度,但必须满足要点1-3。

0 个答案:

没有答案