eclipse 在原型基类的ctor中定义的属性在派生类中不被标识为自己的prop

jhdbpxl9  于 2023-10-18  发布在  Eclipse
关注(0)|答案(1)|浏览(106)

我在Eclipse中使用JSDoc记录了配置了jsconfig.json的现有代码(可以在这里添加它,但它主要是说"es2017",以及我看到完美工作的路径声明)。
我想知道为什么当我将参数定义为具有基类类型时,如果它是派生类,IDE无法识别有效的类型化参数。
我还看到了更奇怪的行为尽管类型检查器似乎理解我的大部分继承模式。
所以几乎有两个问题,但我会描述第二个,这可能会解决第一个。
假设我在JS中有一个抽象类声明:

/**
 * @constructor CoolDownTween
 */
const CoolDownTween = function() {
    this.currentFrame = 0;
    this.ended = false;
}

一个继承自CoolDownTween的子类添加一个nextStep方法,如下所示:

/**
 * @constructor CooledDownPropFadeToggleTween
 */
const CooledDownPropFadeToggleTween = function() {
    CoolDownTween.apply(this, arguments);
}
CooledDownPropFadeToggleTween.prototype = Object.create(CoolDownTween.prototype);

/**
 * @method nextStep
 * @param {Number} stepCount
 * @param {Number} timestamp
 * @return Void
 */
CooledDownPropFadeToggleTween.prototype.nextStep = function(stepCount, timestamp) {
if (timestamp >= 1000) {this.ended = true;}
this.currentFrame += stepCount;
}

为什么Eclipse中的JS/TS LSP(最新)抱怨“currentFrame属性在类型CooledDownPropFadeToggleTween上不存在”?
附属问题:我添加了一个名为“end”的prop,以展示类型检查中的一个bug:为什么在使用“ended”属性时IDE没有显示错误?
我已经阅读了看起来相关的Google结果,以及SO上与记录特定继承模式相关的问题,我找不到为什么我的经典方法会在记录的类中引发如此多的键入错误的答案。

ebdffaop

ebdffaop1#

显然,您需要告诉类型检查器CooledDownPropFadeToggleTweenCoolDownTween的子类,带有JSDOC @extends@augments标记。但不幸的是,似乎唯一的方法是使用实际的class语句。虽然TypeScript支持JSDoc @constructor标记来告诉类型检查器函数将用作类构造函数,但目前还不支持将@extends@constructor一起使用。
microsoft/TypeScript#38985上有一个开放的功能请求来改变这一点。它目前被标记为“等待更多反馈”,这意味着在TS团队真正考虑实现它之前,他们希望从社区中听到更多关于为什么需要该功能以及为什么当前的解决方案还不够的信息。它没有太多的参与,所以我不希望看到它在不久的将来实现。不过,如果它对你很重要,你给予它并提供你的反馈也不会有什么坏处👍。(这可能不会有多大帮助,但如果有足够多的人这样做,谁知道呢?)

相关问题