如何在TypeScript中声明Map?

时间:2016-05-20 10:34:50

标签: typescript

我试图在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地图。

1 个答案:

答案 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