【问题标题】:Typing the Index Signature of a Module Namespace Object键入模块命名空间对象的索引签名
【发布时间】:2016-09-19 19:19:32
【问题描述】:

我有一系列相关的类打包并从单个模块导出。比如:

// 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 on module命名空间对象)...在任何一种情况下,这种迭代都应该是可能的。

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

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

【问题讨论】:

    标签: typescript


    【解决方案1】:

    是否可以在 Typescript 中为 ES6 模块定义这样的签名

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

    import * as States from "./states.ts"
    
    for(let stateExportName in States) {
      let thisStateConstructor:any = States[stateExportName]; // NOTICE THE `:any`
      // ... do something.
    }
    

    【讨论】:

    • “不”是我的想法。然后我会在 TS repo 上为此打开一个问题。关于明确说明:当我添加 :any 时,我仍然得到同样的错误。知道为什么吗?
    猜你喜欢
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 2019-06-03
    相关资源
    最近更新 更多