簡體   English   中英

打字稿使用模塊導入作為接口

[英]Typescript use a module import as an interface

我有一個定義許多功能的模塊:

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
};

然后,在運行時,我可以在這兩種實現之間進行選擇。

有沒有更簡單的方法來確定導入模塊的接口並以動態方式替換它?

由於TypeScript使用結構化類型,因此不必定義顯式接口( Force )並將其用作importImplglobalImpl的類型。 兩者已經具有相同的推斷接口。

如果您在代碼的其他地方需要這種類型,我認為我們可以通過這種方式“捕獲”它: type Force = typeof force;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM