我在typescript中创建了一个类,它的属性是ES6 (ECMAscript 2016) Map,如下所示:

class Item {
  configs: ????;
  constructor () {
    this.configs = new Map();
  }
}

我如何在typescript中声明一个ES6 Map类型?


当前回答

这里有一个例子:

this.configs = new Map<string, string>();
this.configs.set("key", "value");

Demo

其他回答

Typescript还不支持Map。

ES6兼容性表

是地图现在可在typescript..如果你查看lib.es6.d.ts,你会看到这样的界面:

interface Map<K, V> {
  clear(): void;
  delete(key: K): boolean;
  forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void,thisArg?: any): void;
  get(key: K): V | undefined;
  has(key: K): boolean;
  set(key: K, value: V): this;
  readonly size: number;} 

它伟大的使用作为一个字典的字符串,对象对..唯一的烦恼是,如果你用它来赋值其他地方的Map.get(键)IDE像代码给你的问题可能是未定义的..而不是创建一个变量的定义检查..简单地转换类型(假设您确定映射具有键-值对)

class myclass {
   mymap:Map<string,object>
   ...
   mymap = new Map<string,object>()
   mymap.set("akey",AnObject)
   let objectref = <AnObject>mymap.get("akey")

在tsconfig中添加"target": "ESNEXT"属性。json文件。

{
    "compilerOptions": {
        "target": "ESNEXT" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', or 'ESNEXT'. */
    }
}

你可以在Typescript类中创建一个Map,如下所示

export class Shop {
  public locations: Map<number, string>;

  constructor() {
   // initialize an empty map
   this.locations= new Map<number,string>();
  }

   // get & set functions
   ........
}

EDIT(2019年6月5日):虽然“TypeScript原生支持Map”的想法仍然是正确的,因为版本2.1 TypeScript支持一种叫做Record的东西。

type MyMapLikeType = Record<string, IPerson>;
const peopleA: MyMapLikeType = {
    "a": { name: "joe" },
    "b": { name: "bart" },
};

不幸的是,第一个泛型参数(键类型)仍然没有完全得到尊重:即使是字符串类型,像peopleA[0](一个数字)这样的参数仍然有效。


编辑(2016年4月25日):下面的答案是旧的,不应该被认为是最好的答案。TypeScript现在“原生”支持map,所以它只允许在输出为ES6时使用ES6 map。对于ES5,它不提供腻子;你需要自己嵌入它们。

要了解更多信息,请参考下面mohamed hegazy的回答,以获得更现代的答案,或者甚至是reddit上的简短评论。


从1.5.0 beta版开始,TypeScript还不支持map。这也不是路线图的一部分。

目前的最佳解决方案是一个具有类型化键和值的对象(有时称为hashmap)。对于键类型为string,值类型为number的对象:

var arr : { [key:string]:number; } = {};

但是,需要注意的是:

键只能是字符串或数字类型 实际上,使用什么作为键类型并不重要,因为数字/字符串仍然可以互换(只有值是强制的)。

用上面的例子:

// OK:
arr["name"] = 1; // String key is fine
arr[0] = 0; // Number key is fine too

// Not OK:
arr[{ a: "a" }] = 2; // Invalid key
arr[3] = "name"; // Invalid value