microsoft / microsoft/TypeScript
Error messaging improvements when accidentally missing an = in JSX attributes
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Go
- Star
- 111k
- Fork
- 14.3k
- Merge trung bình
- 2 ngày 4 giờ
- Pull request đã merge (30 ngày)
- 132
Mô tả
Bug Report
I think we could give better errors when you miss an = between JSX attributes. Coming from this tweet.
🔎 Search Terms
JSX spread expected attribute
🕗 Version & Regression Information
N/A - Tested in nightly
⏯ Playground Link
import React from "react"
const shouldDisable = true
const b = () => {
<div aria-disabled {shouldDisable} />
// ^^^^^^^^^^^^^ error: '...' expected.(1005)
}
The gist is that TypeScript thinks you will always be using {thing} as a spread {...thing} - but it's also just possible that you missed the =. In this case specifically, shouldDisable is a boolean, which can never spread.
Two ways we could safely improve:
Checking the type of the value in the { }:
// In this case `aria-disabled` is a boolean, and so including it here defaults to 'true' (and doesn't error)
// shouldDisable is a boolean which can never spread like current error: '...' expected.(1005)
// TS could check if token before is a jsx identifier and then recommend to add the `=`
// error: "'shouldDisable' cannot be spread, did you mean to write 'aria-disabled={shoudlDisable}"?
const shouldDisable = true
const b = () => {
<div aria-disabled {shouldDisable} />
}
Checking whether the identifier matches an attribute:
import React from "react"
const onFocus = () => {}
// onFocus known to be function, so this 2nd error: '...' expected.(1005)
// TS could first look to see if there's an attribute with the same name and recommend:
// error: "'onFocus' is not being used to spread inside the JSX element, did you mean to write 'onFocus={onFocus}"?
const a = () => {
<div onFocus {onFocus} />
}
🙁 Actual behavior
It's always an error and assumed to be a spread but without the spread
🙂 Expected behavior
It'd still be an error, but it could be an error which provides the next step.
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- 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.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu với TypeScript JSX playground được cung cấp và bản tái hiện trong Workbench về việc thiếu = giữa các thuộc tính JSX, sau đó kiểm tra cách chẩn đoán hiện tại '...' expected được tạo ra. Công việc được hoàn thành khi cùng một lỗi đó vẫn tiếp tục gây ra lỗi, nhưng cung cấp một gợi ý hữu ích để thêm = bị thiếu mà không biểu diễn sai biểu thức thành spread.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- react, typescript
- Lĩnh vực
- compilers
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 38/100