0

間違った質問。サンプルコードは機能します。

このコードを検討してください

export interface IParameterType{
  name:string,
  label:string,
  type:string,
  defaultValue:number
}

class Object3D{
  public static parameterTypes: IParameterType[] = [];
  constructor(){
    (this.constructor as typeof Object3D).parameterTypes.forEach(paramType => {
        console.log(paramType.name);
      });
  }

}

class Cube extends Object3D{
  public static parameterTypes: IParameterType[] = [
    {
      name: 'width',
      label: 'Width',
      type: 'integer',
      defaultValue: 10,
    },
    {
      name: 'height',
      label: 'Height',
      type: 'integer',
      defaultValue: 10,
    },
    {
      name: 'depth',
      label: 'Depth',
      type: 'integer',
      defaultValue: 10,
    },
  ];
}

class Sphere extends Object3D{
  public static parameterTypes: IParameterType[] = [
    {
      name: 'radius',
      label: 'radius',
      type: 'integer',
      defaultValue: 10,
    },
  ];
}

問題は、(this.constructor as typeof Object3D).parameterTypesポリモーフィックに呼び出されないことです。オブジェクト インスタンスに応じて、Cube または Sphere の parameterTypes を呼び出したいと思います。

JavaScript ではこれは簡単ですthis.constructor.parameterTypesが、TypeScript ではそれができません -> Property 'parameterTypes' does not exist on type 'Function'

何か助けはありますか?

私が試してみました:

if (this instanceof Cube){
      (this.constructor as typeof Cube).parameterTypes.forEach(paramType => {
        console.log(paramType.name!);
      });
    }

しかしそうすると、ポリモーフィズムは何の役に立つのでしょうか?

4

0 に答える 0