我的流式类型如下:
type ModalTypes{
id: number,
name: string
}
我想继承我的类的类型定义,并在构造函数中重用它:
class Modal extends ModalTypes {
constructor(data: ModalTypes) {
super()
this.id = data.id
this.name = data.name
}
}
可悲的是,这不起作用。我知道我只能扩展一个类但是如何在类中添加一些类型定义。 我不想写这样重复的代码:
class Modal{
id: number
name: string
constructor(data: {id: number, name: string}) {
super()
this.id = data.id
this.name = data.name
}
}
这里我要添加id
和name
两次,一次添加到Modal类,一次添加到构造函数。
我想只添加一次并防止重复。
答案 0 :(得分:2)
只需将您的类型更改为:
class ModalTypes {
id: number,
name: string
}
答案 1 :(得分:0)
在这个实例中,继承并不是你所需要的,即使它可能会节省一些打字(没有双关语!)
您可以使用实用程序$PropertyType<>
来避免类型不匹配并至少确保一致性。
(Try)
type Props = {
id: number,
name: string
}
class Modal {
id: $PropertyType<Props, 'id'>
name: $PropertyType<Props, 'name'>
constructor(data: Props) {
this.id = data.id
this.name = data.name
}
}
令人遗憾的是,流不支持在类级别传播,就像在类型级别一样,它会节省一些键盘时间。另一种方法可能是不在类级别提取属性,而是将它们保留在对象属性中,因此:
(Try)
type Props = {
id: number,
name: string
}
class Modal {
props: Props
constructor(props: Props) {
this.props = props
}
}
当然,无论何时您想要访问这些属性,这都意味着更多的指法,并且可能不是您想要的自己的属性&#39;在对象上。使用后一种方法,您甚至可以使用泛型来创建可重用的类,这可能具有一定的价值。
(Try)
type Props = {
id: number,
name: string
}
class Modal<T> {
props: T
constructor(props: T) {
this.props = props
}
}
const modal: Modal<Props> = new Modal({ id: 1, name: 'bob' })