代码之家  ›  专栏  ›  技术社区  ›  Pavlo

将接口包含到.d.ts文件中的类中

  •  1
  • Pavlo  · 技术社区  · 1 年前

    我有一个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 接口属性?尝试了以下操作,但这不是有效的TypeScript:

    class C {
      ...Options;
    
      constructor(options: Options);
    }
    
    1 回复  |  直到 1 年前
        1
  •  1
  •   Viranga    1 年前

    在TypeScript中,可以通过使用交集类型来实现这一点 (&) 。您可以创建一个表示类属性的接口,然后将其与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 接口,这意味着它继承的所有属性 选项 界面这个 constructor 然后函数强制执行 options 参数必须符合 选项 界面

    这样,就可以避免在 选项 接口和 c 班如果在中添加或删除属性 选项 接口 c 类将自动反映这些更改。