You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中如何将导入的模块对象作为类型定义使用

解决方案

错误原因

  • 第一个问题是clients/index.ts导出名称不匹配:导入的是大写开头的Client1/Client2类,导出写的是小写的client1/client2,属于基础语法错误,需要先修正。
  • 第二个问题是类型定义写法错误:import * as clients得到的是运行时可用的模块值对象,类型层面不能直接把clients[key]作为类型使用,需要先通过typeof clients拿到模块对象的类型,再用InstanceType工具类提取构造函数对应的实例类型。

具体实现代码

第一步:修正clients/index.ts

import Client1 from './client1';
import Client2 from './client2';
// 导出名称和导入名称匹配
export { Client1, Client2 };

如果需要实例集合的key为小写,可以在导出时重命名:

export { Client1 as client1, Client2 as client2 };

第二步:调整myApp.ts类型定义

import * as clients from './clients';

// 提取每个导出构造器的实例类型,完成约束
type Clients = {
  [Key in keyof typeof clients]: InstanceType<typeof clients[Key]>
}

const allClients: Clients = {
  Client1: new clients.Client1(),
  Client2: new clients.Client2(),
  // 如果导出时用了小写命名,这里key也对应改成小写即可
}

内容的提问来源于stack exchange,提问作者Kousha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:36:07