我有一个抽象类AbstractCharacter
,具体类:soldier
和knight
,以及许多其他角色。
我如何创建界面,说道具character
将是一个扩展AbstractCharacter
的类
EG
export abstract class AbstractCharacter {
public abstract name: string;
public abstract hp: number;
}
export class Soldier extends AbstractCharacter {
public name = "Soldier";
public hp = 100;
}
class Knight extends AbstractCharacter {
public name = "Knight";
public hp = 100;
}
用法:
interface IFormationCharacter {
character: T extends AbstractCharacter // this doesn't work because T doesn't exist
character: typeof AbstractCharacter // this doesn't allow for extending, i.e. new character() will say "Cannot create an instance of abstract class"
}
export default class FormationCharacter extends React.Component<IFormationCharacter> {
constructor(props: IFormationCharacter) {
super(props);
我知道我可以做typeof Knight | typeof Soldier | typeof ...
,但肯定有一个更好的方法吗?
如何创建界面以说道具角色将是扩展AbstractCharacter的类
您可以使用通用接口:
interface IFormationCharacter<T extends AbstractCharacter> {
character: T;
}
然后,您必须使用带有类型参数的接口,如下所示:
IFormationCharacter<Knight>
IFormationCharacter<Soldier>
// or keep it generic
export default class FormationCharacter<T> extends React.Component<IFormationCharacter<T>> {
constructor(props: IFormationCharacter<T>) {
super(props);
根据您的需求,最好的可能是坚持使用抽象属性character: AbstractCharacter
。