我想转换对象:
var user = {
id: Number,
name: String
}
接口:
type User = {
id: number
name: string
}
现在我试试这个:
type Transform<T extends { [key: string]: ObjectConstructor }> = {[P in keyof T]: (T)[P]['prototype']}
type User = Cast<typeof user>
请帮帮我
答案 0 :(得分:0)
看起来您试图探查 typeof Number
和 typeof String
的构造:为此,您将使用 construct signature 之类的 new (...args: any) => any
而不是特定的此类构造函数类型如 ObjectConstructor
。类型 ObjectConstructor
特别是 typeof Object
,并且具有 Object
的所有静态方法,如 Object.keys()
和 Object.values()
,其中 typeof Number
和 {{ 1}} 不。
但即使你修复它也不会给你你想要的。当您将 Number
和 String
值视为构造函数并调用 typeof String
或 new Number()
时,出现的 InstanceType
将是对象类型 {{1} } 和 new String()
而不是原始类型 Number
或 String
。我假设您想要那些原始类型。
在 JavaScript 中,primitive wrappers 的构造函数也可以像普通函数(number
或 string
没有 Number()
)一样使用,它们返回原语而不是对象。因此,对于此处显示的情况,我会探测 call signatures 之类的 String()
而不是构造签名,并获取 ReturnType
而不是实例类型:
new