Tôi muốn MyInterface.dic
trở nên giống như một cuốn từ điển name: value
, tôi định nghĩa nó như sau:nguyên cảo: Index chữ ký là mất tích trong loại
interface MyInterface {
dic: { [name: string]: number }
}
Bây giờ tôi tạo ra một chức năng mà đợi cho loại của tôi:
function foo(a: MyInterface) {
...
}
Và đầu vào:
let o = {
dic: {
'a': 3,
'b': 5
}
}
tôi đang mong đợi foo(o)
là đúng, nhưng trình biên dịch đang giảm:
foo(o) // Typescript error: Index signature is missing in type { 'a': number, 'b': number }
Tôi biết có một đúc càng tốt: let o: MyInterface = { ... }
mà làm các trick nhưng câu hỏi là, tại sao nguyên cảo không nhận ra loại của tôi?
thêm: hoạt động tốt nếu o
được khai báo inline:
foo({
dic: {
'a': 3,
'b': 5
}
})
> Với chữ ký thứ hai của bạn. Trên thực tế, donot của IDE của tôi cho phép tôi thực hiện 'o.dic.x' – Manu
Bắt tốt, xin lỗi, đó nên là cú pháp chỉ mục ('o.dic ['x'] = 1'). Đã cập nhật ví dụ. –
Cập nhật! Giờ đây, TypeScript 2 sẽ tự động thực hiện chuyển đổi này cho bạn, nếu nó hợp lệ: https://github.com/Microsoft/TypeScript/wiki/What%27s-new-in-TypeScript#implicit-index-signatures –