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

如何合并两个@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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:42:32