microsoft / microsoft/TypeScript

Checking JS types does not accept @implements or @augments on constructor functions

未关闭
#38,985 2 条评论 19 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

Awaiting More Feedback Suggestion
主要语言
Go
星标
111k
派生
14.3k
平均合并
2 天 4 小时
30 天内合并 PR
132

描述

TypeScript Version: 3.9.5 (also tested on 3.9.3 initially)

Search Terms: @implements, jsdoc

Code

/**
 * @param {string} name
 * @implements {EventTarget}
 * @constructor
 */
function Foo (name) {
  this.name = name
}

/**
 * @param {string} type
 * @param {EventListenerOrEventListenerObject} listener
 * @param {boolean | AddEventListenerOptions} [options]
 */
Foo.prototype.addEventListener = function (type, listener, options) {}

Then run tsc --noEmit --checkJS --allowJS reproducer.js

Expected behavior:

According to https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html#constructor-functions-are-equivalent-to-classes, constructor functions are treated like classes. So using @implements or @augments on them should be possible. It used to work in the past.

Actual behavior:

reproducer.js:6:10 - error TS8022: JSDoc '@implements' is not attached to a class.

6 function Foo (name) {
           ~~~


Found 1 error.

Playground Link: I was not able to reproduce this in the playground (but it does not have the latest 3.9 versions available)

Related Issues:

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

从 reproducer.js 示例开始,使用受影响的 TypeScript 版本运行 tsc --noEmit --checkJS --allowJS reproducer.js。跟踪构造函数上 JSDoc @implements@augments 的处理;当这些注解能够在没有 TS8022 的情况下被接受,并且现有的 JavaScript 检查仍然有效时,即表示完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
javascript, typescript
领域
compilers
Issue 类型
缺陷
难度
3/5
预计耗时
1-2 天
活跃度
停滞
描述清晰度
描述清楚
新手友好度
45/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。