我想明确定义类型然后创建它的实例。以下代码解释了问题
import * as Immutable from "immutable";
// this works.
let map = new Immutable.Map<string, number>();
// neither works below.
type MapType = Immutable.Map<string, number>;
let map = new MapType();
let map = new MapType;
let map = MapType();
答案 0 :(得分:3)
当你只为编译时定义一个类型时,它不会成为已编译的js文件的一部分,因此new MapType
无法工作(因为没有这样的在js中为MapType
的东西。
你可以这样做:
let ctor = Immutable.Map;
let map = new ctor<string, number>();
或者这个:
let ctor: { new(): Map<string, number> } = Immutable.Map;
let map = new ctor();
在这两种情况下,ctor
不是type
,而是实际变量,编译器不会删除它,但编译器会将其翻译出来:
let ctor: { new(): Map<string, number> } = Immutable.Map;
进入这个:
let ctor = Immutable.Map;