voglio MyInterface.dic
essere come un dizionario name: value
, definisco come segue:tipografico: firma Indice manca nel tipo di
interface MyInterface {
dic: { [name: string]: number }
}
Ora creare una funzione che attende per il mio tipo:
function foo(a: MyInterface) {
...
}
e l'ingresso:
let o = {
dic: {
'a': 3,
'b': 5
}
}
mi aspetto foo(o)
di essere corretto, ma il compilatore è in calo:
foo(o) // Typescript error: Index signature is missing in type { 'a': number, 'b': number }
So che c'è una possibile fusione: let o: MyInterface = { ... }
che fare il trucco, ma la domanda è: perché dattiloscritto non riconosce il mio tipo?
Extra: funziona bene se o
è dichiarata in linea:
foo({
dic: {
'a': 3,
'b': 5
}
})
> Con la seconda firma sei. In realtà il mio IDE non mi permette di fare 'o.dic.x' – Manu
Buona cattura, mi dispiace, avrebbe dovuto essere la sintassi dell'indice ('o.dic ['x'] = 1'). Esempio aggiornato. Aggiornamento –
! TypeScript 2 ora dovrebbe eseguire automaticamente questa conversione per te, se è valida: https://github.com/Microsoft/TypeScript/wiki/What%27s-new-in-TypeScript#implicit-index-signatures –