我想定义一个接口,在该接口中传递通用参数,然后使用传递的值及其类型。
这类似于我要完成的工作:
interface ComponentProps<T extends new (...args: any) => any> {
params: ConstructorParameters<typeof T>[0]
onSubmit: (op: T) => void
}
哪个出现此错误,因为参数是一个值:
'T'仅指类型,但在此处用作值。ts(2693)
我可以定义此接口并将其用作:
interface ComponentProps<T> {
onSubmit: (op: T) => void
}
type CustomComponentProps = ComponentProps<ClassA> // I can directly pass the class
或
interface ComponentProps<T extends new (...args: any) => any> {
params: ConstructorParameters<T>[0]
}
type CustomComponentProps = ComponentProps<typeof ClassA> // I need to pass typeof the class
这可能是一个简单的问题,我目前还无法弄清楚,但是可以将类本身作为通用参数传递,然后在接口内部获取其类型,而无需像ComponentProps<ClassA, typeof ClassA>
那样分别传递它们?
答案 0 :(得分:1)
是否可以将类本身作为通用参数传递,然后在接口内获取其类型,而无需分别传递它们
您可以使用InstanceType获取类类型的实例类型:
class ClassA {
constructor(public a: string) { }
}
interface ComponentProps<T extends new (...args: any) => any> {
params: ConstructorParameters<T>[0]
onSubmit: (op: InstanceType<T>) => void
}
declare const props: ComponentProps<typeof ClassA>
props.params // params: string
props.onSubmit(new ClassA("foo") ) // onSubmit: (op: ClassA) => void