2016-07-09 12 views
0

Ich bin mir nicht sicher, was ich falsch mache. TypeScript beschwert sich, dass server nicht in meinem Webpack-Eingabefeld vorhanden ist.Pushing zu Array von Webpack-Entry-Dateien

das Problem zu vereinfachen ich getrimmt es so weit nach unten:

interface Entry { 
    [name: string]: string | string[]; 
} 

interface WebpackConfig { 
    entry: Entry 
} 

var config : WebpackConfig = { 
    entry: { 
     server: ['server'], 
     client: ['client'] 
    } 
} 

config.entry.server.push('another'); 

Fehler:

TSError: ⨯ Unable to compile TypeScript 
webpack.config.ts (75,18): Property 'server' does not exist on type 'Entry' 

Per meine Entry Schnittstelle Eintrag jede Eigenschaft haben kann.

Playground link

Antwort

0

Ihre Entry Schnittstelle wird als Wendetyp definiert, was bedeutet, dass Sie die Elemente mit den eckigen Klammern zugreifen und nicht Punkt verwenden.

Dies ist, wie Sie es tun sollten:

config.entry["server"].push('another') 

, die auch fehlschlagen, weil Sie nicht push vom Typ string | string[], verwenden können, aber das wird es tun:

let item = config.entry["server"]; 
if (item instanceof Array) { 
    item.push('another'); 
} 

Wenn Sie möchten, Um auf die Elemente mit der Punktnotation zugreifen zu können, gehen Sie folgendermaßen vor:

interface Entry { 
    server: string | string[]; 
    client: string | string[]; 
    [name: string]: string | string[]; 
} 

Und dann können Sie:

let item = config.entry.server; 
if (item instanceof Array) { 
    item.push('another'); 
} 
Verwandte Themen