2015-07-22 10 views
6

Vorrei creare un'interfaccia per un oggetto che ha un determinato tipo per una specifica proprietà denominata e un tipo diverso per tutte le altre proprietà.Interfaccia dattiloscritto con proprietà denominate e proprietà di indice con nome arbitrario di tipo diverso

Come scrivere una definizione per foo di seguito?

let foo = { 
    size: 3, 
    a: 'foo', 
    b: 'bar', 
    c: 'baz' 
} 

Questo sarebbe il mio approccio intuitivo:

interface Foo { 
    size: number; 
    [name: string]: string; 
} 

Tuttavia, dattiloscritto cerca di applicare la definizione generale per la definizione specifica e fa scattare il seguente errore:

error TS2411: Property 'size' of type 'number' is not assignable to string index type 'string'. 

risposta

4

senza definire ogni proprietà, è previsto, ma è possibile farlo:

interface Foo1 { 
    size: number; 
    [name: string]: string|number; 
} 

Meglio dell'uso di any.

4

Si può fare qualcosa di simile (non so se funzionerà in TS v1.5):

interface Size { 
    size: number; 
} 

interface StringMap { 
    [name: string]: string; 
} 

type Foo = Size & StringMap; 
+0

Si può anche inline questo se vuoi (anche non al 100% sicuro ts 1.5). tipo Foo = {dimensione: numero} e {[nome: stringa]: stringa}; – bingles

Problemi correlati