键入模块命名空间对象的索引签名

时间:2016-09-19 19:19:32

标签: typescript

我从一个模块中打包并导出了一系列相关的类。类似的东西:

// states.ts

export {default as Alabama} from "./alabama";
export {default as Alaska} from "./alaska";
//...

现在,在代码的其他地方,我想迭代所有相关的类:

import * as States from "./states.ts"

for(let stateExportName in States) {
  let thisStateConstructor = States[stateExportName];
  // ... do something.
}

不考虑对commonjs模块的导出名称的迭代将使用for-in(如上所述),而迭代es6模块名称空间对象的导出将使用for-of(因为es6 does define @@ iterator在模块命名空间对象上)...在任何一种情况下,都应该可以进行这种迭代。

问题在于,当我执行States[stateExportName]时,我得到一个“对象类型的索引签名隐式具有'任意'类型。”这是有道理的,因为我没有在任何地方为模块定义索引签名。

我的问题是:是否可以在Typescript中为ES6模块定义这样的签名?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:0)

  

是否可以在Typescript

中为ES6模块定义这样的签名

没有。但是,您可以明确关于任何性质,如下所示:

import * as States from "./states.ts"

for(let stateExportName in States) {
  let thisStateConstructor:any = States[stateExportName]; // NOTICE THE `:any`
  // ... do something.
}