Typescript使用模块导入作为接口

时间:2017-10-03 05:26:37

标签: typescript

我有一个定义了许多功能的模块:

export function setNodeCount(count: i32): void {
  nodeCount = count;
}

export function getNodeCount(): i32 {
  return nodeCount;
}

然后我将其导入另一个打字稿文件,如下所示:

import * as force from '../force';

我希望能够使用全局范围内的变量来模拟/交换force

为了实现这个目的,我必须为这个模块导出的函数定义一个接口:

interface Force {
  setNodeCount: (number) => void;
  getNodeCount: () => number;
}

然后通过导入的模块或全局:

实现
const importImpl: Force = {
  setNodeCount: force.setNodeCount,
  getNodeCount: force.getNodeCount
}

const globalImpl: Force = {
  getNodeCount: globalObject.getNodeCount,
  setNodeCount: globalObject.setNodeCount
};

在运行时,我可以在这两种实现之间进行选择。

是否有更简单的方法来确定导入模块的接口并进行动态替换?

1 个答案:

答案 0 :(得分:0)

由于TypeScript使用结构类型,因此无需定义显式接口(Force)并将其用作importImplglobalImpl的类型。两者都已经具有相同的推断接口。

如果您在代码中的其他位置需要此类型,我认为我们可以“捕获”#34;这样:type Force = typeof force;