microsoft / microsoft/TypeScript

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

Đang mở
#38,985 2 bình luận 19 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Awaiting More Feedback Suggestion
Ngôn ngữ chính
Go
Star
111k
Fork
14.3k
Merge trung bình
1 ngày 19 giờ
Pull request đã merge (30 ngày)
117

Mô tả

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:

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Bắt đầu với ví dụ reproducer.js và chạy tsc --noEmit --checkJS --allowJS reproducer.js bằng phiên bản TypeScript bị ảnh hưởng. Theo dõi cách xử lý JSDoc @implements@augments trên các hàm khởi tạo; công việc được hoàn thành khi các chú thích được chấp nhận mà không có TS8022 và các kiểm tra JavaScript hiện có vẫn hợp lệ.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
javascript, typescript
Lĩnh vực
compilers
Loại issue
Lỗi
Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Đặc tả rõ ràng
Mức phù hợp với người mới
45/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.