键入提示扩展的抽象类

问题描述 投票:0回答:1

我有一个抽象类AbstractCharacter,具体类:soldierknight,以及许多其他角色。

我如何创建界面,说道具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 ...,但肯定有一个更好的方法吗?

typescript react-native
1个回答
2
投票

如何创建界面以说道具角色将是扩展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

© www.soinside.com 2019 - 2024. All rights reserved.