问题 TypeScript Map:如何使用强类型?


我在打字时很难打字 Map 对象 typescript 1.8.10。这是摘录自 core-js 定义Map接口:

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;
}

我想创建一个使用字符串键的地图,并且只存储具有该形状的值 {name:string,price:number}。我尝试用以下方式声明我的对象:

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

但是,编译器会抛出错误 TS2322: Type 'Map<{}, {}>' is not assignable to type 'Map<string, { name: string; price: number; }>'。使用ES6时有没有办法利用强类型 Map 打字稿中的对象?


10849
2018-06-18 07:36


起源

我认为最好为{name:string,price:number}定义一个接口 - alexeibs
通常我会这样做。它在这里没有帮助我:错误被触发,因为在分配的正确标志上没有类型(旁边 new Map)。 - BeetleJuice


答案:


您需要为创建的提供泛型类型信息 Map 像那样:

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

之后,您可以省略类型声明,将作业留给编译器:

// oMap is correctly inferred to be Map<string,{name:string,price:number}>
let oMap = new Map<string,{name:string,price:number}>();

14
2018-06-18 08:22