2017-07-08 2 views
0

ich diesen Code habe verwenden:Kann nicht ‚neu‘ mit dem Funktionstyp in Typoskript

const BlockConstructors: Function[] = [ 
OBlock, 
IBlock, 
TBlock 
]; 

function randomFromArray(array: any[]) { 
    return array[Math.floor(Math.random() * array.length)]; 
} 

const BlockConstructor: Function = random(BlockConstructors); 
const block: Block = new BlockConstructor(); 

ich versuche, einen Teil Blockkonstruktor von Array zu ziehen und dann ein neues Objekt, all meinen Block Bauer schafft in Array erweitert Blockklasse Ich erhalte Fehler:

Cannot use 'new' with an expression whose type lacks a call or construct signature.

Warum dieser Fehler erscheint?

+1

Const soll auf einen const-Wert gesetzt sein, und Sie sollten keinen neuen Verweis auf einen const-Wert machen. –

+0

Warum möchten Sie eine neue Instanz von etwas machen, das sich sowieso nicht ändert? :) – toskv

Antwort

1

Ihr Code ist nicht in sich abgeschlossen, aber hier ist der eingekochte Grund.

Function ist nicht new -fähig. Nur drei Dinge können new sein ‚d in Typoskript:

  1. Typen mit konstruieren Signaturen
  2. Typen ohne Konstrukt Signaturen, sondern mit Aufruf Signaturen, die void
  3. any
zurückkehren

Sie wollen wirklich die erste.

Versuchen Sie, von Function zu (new() => Block) zu wechseln.