Chcę MyInterface.dic
być jak słownika name: value
, zdefiniować go w następujący sposób:Typescript: Index podpis brakuje w rodzaju
interface MyInterface {
dic: { [name: string]: number }
}
Teraz utworzyć funkcję, która czeka na mój typ:
function foo(a: MyInterface) {
...
}
i wejście:
let o = {
dic: {
'a': 3,
'b': 5
}
}
Czekam foo(o)
za prawidłowe, ale kompilator spada:
foo(o) // Typescript error: Index signature is missing in type { 'a': number, 'b': number }
wiem, że jest to możliwe odlewanie: let o: MyInterface = { ... }
które rade ale pytanie brzmi, dlaczegomaszynopis nie rozpoznaje typ?
Extra: działa dobrze jeśli o
jest zadeklarowana inline:
foo({
dic: {
'a': 3,
'b': 5
}
})
> Z drugim podpisem jesteś. W rzeczywistości Moje IDE nie pozwala mi na wykonywanie 'o.dic.x' – Manu
Dobrze, przepraszam, to powinna być składnia indeksu ('o.dic ['x'] = 1'). Przykład zaktualizowany. –
Aktualizacja! TypeScript 2 powinien teraz automatycznie wykonać tę konwersję, jeśli jest ona ważna: https://github.com/Microsoft/TypeScript/wiki/What%27s-new-in-TypeScript#implicit-index-signatures –