間違った質問。サンプルコードは機能します。
このコードを検討してください
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!);
});
}
しかしそうすると、ポリモーフィズムは何の役に立つのでしょうか?