我试图在TypeScript中使用字符串键和一些对象作为值声明一个简单的地图结构。看看几个StackOverflow答案,这就是我想出的:
class Person {
id: number;
name: string;
}
interface PersonMap {
[id: string]: Person;
}
当我尝试使用此声明时,TypeScript将PersonMap解释为数组而不是地图,例如我无法从地图中获取键或值:
let personMap = {} as PersonMap;
personMap[1] = {
id: 1,
name: 'John',
}
let people = personMap.values();
TypeScript抱怨上面的最后一句话:
Property 'values' does not exist on type 'PersonMap'
在TypeScript中声明Map的最佳方法是什么?
P.S。它看起来并不像TypeScript内置了ES6 Map类型。无论如何,我想创建自己的Map,而不是ES6地图。
答案 0 :(得分:0)
您尝试过Map对象吗?
class Category {
constructor(name){
this.name = name; // Category name
this.subscribers = [];
}
subscribe(observer){
console.log(this.subscribers)
this.subscribers.push(observer)
console.log(this.subscribers)
}
sale(discount){
this.subscribers.forEach(observer => observer.notify(this.name, discount))
}
}
// module.exports = Category;
// Observer
class Shopper {
notify(name, discount){ console.log(name, discount) }
}
// module.exports = Shopper;
const book = new Category("Book");
const shopper = new Shopper("PAUL")
const subscribe = book.subscribe(shopper);
在线声明:
let personMap = new Map()
map.set("1234", person1)
map.set("4567", person2)
map.get("1234") => person1