在TypeScript定义文件中是否可直接继承导入模块的导出类型?
解答
你写的第一种直接继承import()导入类型的写法本身就是合法的 TypeScript 语法,不需要额外定义类型别名中转。
适用条件
该语法从 TypeScript 2.9 版本开始正式支持,只要你使用的是 2.9 及以上版本的 TypeScript,以下代码可以直接在 .d.ts 类型定义文件中正常运行:
interface A extends import("some-module").B { // 在此定义A的自有属性和方法 customProp: string; }
报错排查方案
如果你的环境中该写法出现报错,可以按以下顺序排查:
- 确认本地 TypeScript 版本,低于 2.9 时升级到最新稳定版即可
- 检查
tsconfig.json中的moduleResolution配置,确保设置为node/bundler/node16等支持模块路径解析的选项 - 核对导入路径
some-module的正确性,以及该模块确实对外导出了名为B的类型
替代实现
如果受环境限制无法使用直接继承的写法,除了你目前在用的类型别名中转方案,还可以用交叉类型实现同等效果,同样不需要单独定义中转类型:
type A = import("some-module").B & { // 在此定义A的自有属性和方法 customProp: string; }
内容的提问来源于stack exchange,提问作者Jordan L
相关产品推荐
相关产品推荐

