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

如何在.d.ts文件中让类包含接口属性,避免重复定义?

无需重复定义属性的.d.ts写法

你可以利用TypeScript的声明合并特性,让类的实例自动继承Options接口的所有属性,避免重复代码:

步骤1:定义Options接口

先写出你的配置项接口,包含所有需要扩展到实例的属性:

// .d.ts文件中
export interface MyClassOptions {
  name: string;
  age: number;
  email: string;
}

步骤2:声明类并合并实例类型

先声明类的构造函数,再通过同名接口合并,把Options的属性注入到类的实例类型中:

export declare class MyClass {
  constructor(options: MyClassOptions);
}

// 关键:通过接口合并,让MyClass实例自动拥有MyClassOptions的所有属性
export interface MyClass extends MyClassOptions {}

这样写之后,当你在TypeScript中使用这个类时,实例会自动拥有name、age、email等属性,完全匹配你用Object.assign实现的JavaScript逻辑,而且不需要在类的声明里重复写这些属性。

原理

TypeScript支持同名的接口与类进行声明合并,这里的interface MyClass会被合并到MyClass类的实例类型上,相当于给实例扩展了MyClassOptions的全部属性,完美适配你的需求。

备选方案:交叉类型构造函数

如果你偏好更直接的类型定义方式,也可以直接指定构造函数的返回类型为类实例与Options的交叉类型:

export interface MyClassOptions {
  name: string;
  age: number;
}

export declare const MyClass: {
  new(options: MyClassOptions): MyClass & MyClassOptions;
};

// 声明基础的MyClass接口(如果需要额外类方法/属性的话)
export interface MyClass {
  // 可以在这里添加类本身的方法,比如:
  sayHello(): void;
}

这种写法同样能让实例拥有Options的属性,适合需要额外定义类方法的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:57:15