TS:转换 'DateConstructor => Date' 和 'typeof MyClass => MyClass'



如何将DateConstructor类型转换为Date
如何将typeof MyClass转换为MyClass

代码:游乐场链接

class MyDate extends Date { toNiceString () { return super.toString() } }
const skipObjectTypes = [Date, RegExp, MyDate] // for use as JS
/* problem here */
type SkipTypes = typeof skipObjectTypes[number]
// SkipTypes = typeof MyDate | DateConstructor | RegExpConstructor
/* desirable behavior */
type SkipTypesDesirable = Date | RegExp | MyDate

[Date, RegExp, MyDate]将包含一个类数组,因此typeof skipObjectTypes[number]将为您提供这些类的并集。

如果您想要实例类型,可以使用InstanceType条件类型:

class MyDate extends Date { toNiceString () { return super.toString() } }
const skipObjectTypes = [Date, RegExp, MyDate] // for use as JS
/* problem here */
type SkipTypes = InstanceType<typeof skipObjectTypes[number]>
// SkipTypes = typeof MyDate | DateConstructor | RegExpConstructor

游乐场链接

找到了两种方法来解决这个问题:操场链接

type SkipTypesMethod1 = InstanceType<typeof skipObjectTypes[number]>
type SkipTypesMethod2 = typeof skipObjectTypes[number]["prototype"]

感谢@Titian Cernicova Dragomir的第一条路。

相关内容

最新更新