VSCode和JSDoc-重载类类型定义

问题描述

我有一个有趣的情况,我试图重载类实例的JSDoc类型,因为实例属性是基于外部架构动态生成的。基本上,我有一个基类和一个子类,并且该子类在类定义中没有任何实际的JavaScript属性,但是实例化后,最终实例将具有基于外部模式定义的属性(通过基类中的魔术)

例如:

class Base {
  constructor () {
    // read this.schema and build out dynamic properties
    ...
  }

  copy () {
    ...
  }
}

class FooSubClass extends Base {
  get schema () {
     return '/path/to/my-schema.json'
  }
}

我已经从模式中生成一个foo-sub-class.d.ts文件,并试图以各种方式对其进行分配,但是VSCode似乎不想接受它作为定义。我尝试过:


/**
 * @typedef {import('./foo-subclass.d.ts').FooInterface} FooInterface
 */

/**
 * @typedef {import('./base').Base & FooInterface} FooClass
 */

/** @type {FooClass} */
const myInstance = new FooSubClass()

但是当我尝试从中访问属性时,我只会得到基类的方法

myInstance. // < intellisense shows `.copy()`

这似乎也无效:

class FooSubClass extends Base {
  /** @returns {FooClass} */ // < shows an error
  constructor () {
    ...
  }
}

如何重载VSCode中构造函数返回的类型定义?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)