javascript - 使用强类型 map

标签 javascript typescript ecmascript-6

我在输入 Map 时遇到问题带有 typescript 1.8.10 的对象.这是 core-js 的摘录定义 map 接口(interface):

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 typescript 中的对象?

最佳答案

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

关于javascript - 使用强类型 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37894517/

相关文章:

javascript - 如何使下拉菜单响应式?

javascript - 谁能告诉我这些黑客试图在我的网站上做什么?

javascript - 如何在 Angular 5 中使用枚举

typescript - Firebase 云功能 - 未处理的错误错误 : Update()

module - Moment.js + typescript 。暂时找不到名字

reactjs - Redux 更新嵌套数据 [不可变更新模式]

javascript - 将 { t } (来自 i18n-react)传递给无状态组件时无法使用 props

javascript - "Array(n)"和 "[...Array(n)]"有什么区别?

javascript - Node.js xml 到 json 对象

javascript - 在函数定义的最后一个参数之前使用剩余参数