2016-06-18 18 views
11

Tôi gặp sự cố khi nhập mạnh đối tượng Map của mình với typescript 1.8.10. Dưới đây là một đoạn trích từ core-js định giao diện bản đồ:Bản đồ TypeScript: cách sử dụng các loại mạnh?

interface Map<K, V> { 
    clear(): void; 
    delete(key: K): boolean; 
    forEach(callbackfn: (value: V, index: K, map: Map<K, V>) => void, thisArg?: any): void; 
    get(key: K): V; 
    has(key: K): boolean; 
    set(key: K, value?: V): Map<K, V>; 
    size: number; 
} 

Tôi muốn tạo ra một bản đồ có sử dụng phím chuỗi và duy nhất từng lưu trữ giá trị với hình dạng {name:string,price:number}. Tôi đã cố gắng khai báo đối tượng của mình với:

let oMap:Map<string,{name:string,price:number}> = new Map(); 

Tuy nhiên, trình biên dịch phát ra lỗi TS2322: Type 'Map<{}, {}>' is not assignable to type 'Map<string, { name: string; price: number; }>'. Có cách nào để tận dụng lợi thế của việc gõ mạnh khi sử dụng các đối tượng ES6 Map trong bản đánh máy?

+0

Tôi nghĩ rằng nó tốt hơn để xác định một giao diện cho {name: string, price: number} – alexeibs

+0

Thông thường tôi sẽ làm như vậy. Nó sẽ không giúp tôi ở đây: lỗi đã được kích hoạt vì không có loại nào trên dấu hiệu đúng của nhiệm vụ (bên cạnh 'Bản đồ mới'). – BeetleJuice

Trả lời

14

Bạn cần cung cấp thông tin các loại tổng quát cho lớp tạo Map như thế:

let oMap:Map<string,{name:string,price:number}> = new Map<string,{name:string,price:number}>(); 

Và sau đó bạn có thể bỏ qua khai báo kiểu, để lại công việc để biên dịch:

// oMap is correctly inferred to be Map<string,{name:string,price:number}> 
let oMap = new Map<string,{name:string,price:number}>(); 
Các vấn đề liên quan