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

将类构造器重载复制至静态方法Span.make的实现方案

为带重载构造函数的类实现静态工厂方法

现有一个带有两个构造器重载的Span类:

export class Span {
  start: Time
  end: Time
  constructor (span: TimeConstructable, end?: TimeConstructable)
  constructor (span: {
    start: TimeConstructable,
    end: TimeConstructable
  })
  constructor (span: {
    start: TimeConstructable,
    end: TimeConstructable
  } | TimeConstructable, end?: TimeConstructable) {
    if (typeof span === 'object' && ('start' in span) && ('end' in span)) {
      this.start = Time.m(span.start)
      this.end = Time.m(span.end)
    } else {
      if (!end) throw new Error('missing end in span')
      this.start = Time.m(span)
      this.end = Time.m(end)
    }
  }
}

需要添加一个静态方法Span.make,要求:

  • 接收与构造函数完全相同的参数
  • 内部仅通过调用new Span(...)创建实例,不重复构造函数内的逻辑

以下是符合要求的实现:

export class Span {
  start: Time
  end: Time
  constructor (span: TimeConstructable, end?: TimeConstructable)
  constructor (span: {
    start: TimeConstructable,
    end: TimeConstructable
  })
  constructor (span: {
    start: TimeConstructable,
    end: TimeConstructable
  } | TimeConstructable, end?: TimeConstructable) {
    if (typeof span === 'object' && ('start' in span) && ('end' in span)) {
      this.start = Time.m(span.start)
      this.end = Time.m(span.end)
    } else {
      if (!end) throw new Error('missing end in span')
      this.start = Time.m(span)
      this.end = Time.m(end)
    }
  }

  static make (span: TimeConstructable, end?: TimeConstructable)
  static make (span: {
    start: TimeConstructable,
    end: TimeConstructable
  })
  static make (span: {
    start: TimeConstructable,
    end: TimeConstructable
  } | TimeConstructable, end?: TimeConstructable) {
    return new Span(span, end)
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 11:27:27