如何合并两个@types包的TypeScript定义文件为一个?
合并@types包类型到自定义d.ts文件的方案
直接上实操步骤,你可以按这个来写package-mine.d.ts:
1. 先导入两个包的目标类型
首先得把@types/package-a和@types/package-b里你需要的类型导进来,注意区分原包是命名导出还是默认导出:
情况1:原包是命名导出
如果package-a.d.ts和package-b.d.ts是像下面这样的命名导出:
// @types/package-a/index.d.ts export interface PackageA { propA: string; methodA(): void; } // @types/package-b/index.d.ts export interface PackageB { propB: number; methodB(): boolean; }
那在你的package-mine.d.ts里这么导入:
import type { PackageA } from 'package-a'; import type { PackageB } from 'package-b';
情况2:原包是默认导出
如果原包用的是默认导出:
// @types/package-a/index.d.ts export default interface PackageA { propA: string; }
导入方式改成:
import type PackageA from 'package-a'; import type PackageB from 'package-b';
2. 创建合并后的新类型
用TypeScript的**交叉类型(&)**直接合并两个类型,或者用类型别名扩展,两种方式都能达到你要的「合并对象类型」效果:
方式1:交叉类型合并(最直接)
// package-mine.d.ts import type { PackageA } from 'package-a'; import type { PackageB } from 'package-b'; // 合并后的新类型 export type PackageMine = PackageA & PackageB;
这个PackageMine就会同时拥有PackageA和PackageB的所有属性和方法,和你要的{ ...package-a-objecttype, ...package-b-objecttype }效果完全一致。
方式2:接口扩展(适合需要额外加属性的场景)
如果之后还要给合并后的类型加自定义属性,用接口扩展更方便:
// package-mine.d.ts import type { PackageA } from 'package-a'; import type { PackageB } from 'package-b'; export interface PackageMine extends PackageA, PackageB { // 可以加自定义属性 customProp: boolean; }
3. 验证使用
之后你就能在项目里直接导入这个合并后的类型用了:
import type { PackageMine } from './package-mine'; const obj: PackageMine = { propA: 'test', methodA: () => {}, propB: 123, methodB: () => true, customProp: true // 如果用了接口扩展的话 };
内容的提问来源于stack exchange,提问作者Gary
相关产品推荐
相关产品推荐

