Полиморфный вызов this.constructor - PullRequest
0 голосов
/ 25 сентября 2018

НЕПРАВИЛЬНЫЙ ВОПРОС.ПРИМЕР КОДА РАБОТАЕТ.

Рассмотрим этот код

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 не вызывается полиморфно, я хотел бы вызывать параметр TypeTypes для Cube или Sphere в зависимости от экземпляра объекта.

В 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!);
      });
    }

Но при чем тут полиморфизм?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...