НЕПРАВИЛЬНЫЙ ВОПРОС.ПРИМЕР КОДА РАБОТАЕТ.
Рассмотрим этот код
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!);
});
}
Но при чем тут полиморфизм?