【发布时间】:2018-08-11 15:31:52
【问题描述】:
我有以下课程:
class Walls { }
class Furniture { }
class Layout<T extends Walls | Furniture> { }
class Space extends Layout<Walls> { }
class Room extends Layout<Furniture> { }
我需要创建这两个类:
class SpaceController extends LayoutController<Space> { }
class RoomController extends LayoutController<Room> {}
为此,我不能像这样创建LayoutController 类:
class LayoutController<T extends Layout>{ }
因为Layout 需要一个类型参数。
我可以改为创建这个:
class LayoutController<U, T extends Layout<U extends Walls | Furniture>>{ }
但这意味着我必须这样做:
class SpaceController extends LayoutController<Walls, Space> { }
class RoomController extends LayoutController<Furniture, Room> {}
我觉得这是多余的。此外,它为错误开辟了空间。没有什么能阻止我写作:
class RoomController extends LayoutController<Walls, Room> {}
我该如何解决这个问题?
更多关于LayoutController的详情:
class LayoutController<T> extends React.Component<{}, LayoutControllerState<T>>() { }
interface LayoutControllerState<T> {
selectedLayout: T;
}
【问题讨论】:
-
您能否提供更多有关
LayoutController实施的详细信息?似乎可以将其定义为class LayoutController<T extends Walls | Furniture>,但也许我遗漏了一些东西。 -
@AlekseyL。它是一个 React 组件,在 state 中有一个名为 selected layout 的字段。 ``` 类 LayoutController
扩展 React.Component>() { } interface LayoutControllerState { selectedLayout: T; } ``` -
好的,所以你可以输入内部布局文件为
Layout<T>,其中T是LayoutController的通用参数 -
@AlekseyL。 cmets 格式被破坏。请查看问题本身的编辑。
-
@AlekseyL.这意味着我必须写
class SpaceController extends LayoutController<Walls> { },而不是LayoutController<Space>
标签: typescript generics nested-generics