我有一个使用构造函数选项扩展实例的JavaScript类:

class C {
  constructor(options) {
    Object.assign(this, options)
  }
}

这意味着类实例将拥有options对象的所有属性.

我正在寻找一种在不复制接口属性的情况下为该类编写.d.ts定义的方法:

interface Options {
  foo: number;
  bar: string;
}

class C {
  foo: number;
  bar: string;

  constructor(options: Options);
}

有没有办法包含所有Options个接口属性?try 了以下操作,但这不是有效的Typescript :

class C {
  ...Options;

  constructor(options: Options);
}

推荐答案

在TypeScrip中,您可以通过使用交叉点类型(&)来实现这一点.您可以创建一个表示类属性的接口,然后将其与Options接口相交.以下是你如何做到这一点:

interface Options {
  foo: number;
  bar: string;
}

interface C extends Options {}

class C {
  constructor(options: Options) {
    Object.assign(this, options);
  }
}

// Example usage
const instance = new C({ foo: 42, bar: "hello" });
console.log(instance.foo); // 42
console.log(instance.bar); // "hello"

在本例中,C类扩展了Options接口,这意味着它继承了Options接口的所有属性.然后,constructor函数强制options参数必须符合Options接口.

这样,您就可以避免在Options接口和C类中重复属性定义.如果您在Options接口中添加或删除属性,C类将自动反映这些更改.

Javascript相关问答推荐

如何在加载的元数据上使用juserc和await中获得同步负载?

在JavaScript中,如何将请求的回调函数的结果合并到运行的代码中?

获取加载失败:获取[.]添加时try 将文档添加到Firerestore,Nuxt 3

从实时数据库(Firebase)上的子类别读取数据

使用续集和下拉栏显示模型属性

useNavigation更改URL,但不呈现或显示组件

网页自检测外部元素无法加载

我可以从React中的出口从主布局调用一个处理程序函数吗?

将旋转的矩形zoom 到覆盖它所需的最小尺寸&S容器

连接到游戏的玩家不会在浏览器在线游戏中呈现

基于props 类型的不同props ,根据来自接口的值扩展类型

如何在JAVASCRIPT中合并两组对象并返回一些键

触发异步函数后不能显示数据

第一项杀死下一项,直到数组长度在javascript中等于1

JavaScript将字符串数字转换为整数

用Reaction-RT-Chart创建实时条形图

我为什么要使用回调而不是等待?

如何在Reaction中设置缺省值, Select 下拉列表,动态追加剩余值?

在Press Reaction本机和EXPO av上播放单个文件

当达到高度限制时,如何裁剪图像?使用html和css