【问题标题】:Using strong typed Map使用强类型 Map
【发布时间】:2016-10-20 01:20:45
【问题描述】:

我在用typescript 1.8.10 强输入Map 对象时遇到问题。以下是定义 Map 接口的core-js 的摘录:

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&lt;{}, {}&gt;' is not assignable to type 'Map&lt;string, { name: string; price: number; }&gt;'。在打字稿中使用 ES6 Map 对象时,有没有办法利用强类型?

【问题讨论】:

  • 我觉得给{name:string,price:number}定义一个接口比较好
  • 通常我会这样做。它在这里对我没有帮助:触发错误是因为作业的正确标志上没有类型(new Map 旁边)。

标签: javascript typescript ecmascript-6


【解决方案1】:

您需要像这样向创建的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}>();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 2023-03-26
    • 2011-01-01
    • 2020-10-05
    • 2021-10-18
    相关资源
    最近更新 更多