【发布时间】:2021-10-25 14:09:17
【问题描述】:
下面我有一个扩展Joke 的Signup 类。
我想要的是 v 有一个类型错误,其中用户名不能是数字,但通用 ObjectProps 无法正确获取 Signup 的属性。
type Constructor = new (...args: any[]) => {}
type ObjectProps<T extends Constructor, V extends Constructor | undefined = undefined> = Omit<{
[k in keyof T]: T[k]
}, keyof V>
class Joke {
anythingNotInOriginal: boolean = true
}
class Signup extends Joke {
email: string = ''
username: string = ''
password: string = ''
}
type x = ObjectProps<typeof Signup, typeof Joke>
const v: x = {
username: 1
}
我怎样才能让x 具有以下签名:
{ email: string, username: string, password: string }
并从Signup 类派生?
【问题讨论】:
-
“它扩展这个原始类型有一个特定的原因,所以想象一下它是任何具有自己属性的扩展类,这应该没关系”如果没关系那么为什么要分散你的问题它?我们不必想象任何事情;您可以更改问题,以免引发此类问题。
-
“用户名不能是布尔值”我在问题的其他任何地方都没有看到布尔值,这是什么意思?
-
如果你写
type X = Omit<Signup, keyof Object>,有什么问题?我不确定您为什么要探测构造函数类型以获取实例属性;为什么要处理typeof Signup和typeof Object而不是Signup和Object?你能提供一个minimal reproducible example 来说明你为什么要查看构造函数类型而不是实例类型吗? -
????更新@jcalz
标签: typescript class generics