Microsoft/TypeScript

Confusing error on computed name class member

Open

#61,510 创建于 2025年3月31日

在 GitHub 查看
 (2 评论) (0 反应) (0 负责人)TypeScript (6,726 fork)batch import
Domain: Error MessagesHelp WantedPossible Improvement

仓库指标

Star
 (48,455 star)
PR 合并指标
 (平均合并 6天 17小时) (30 天内合并 9 个 PR)

描述

🔎 Search Terms

late bindable computed symbol class member

🕗 Version & Regression Information

  • This is the behavior in every version I tried

⏯ Playground Link

https://www.typescriptlang.org/play/?target=99&lib=lib.esnext.d.ts&ts=5.9.0-dev.20250326#code/MYewdgzgLgBArmAlgRzgUwMoE8C2AjEAGwAYYBeGbfIgOgDMQAnACgCJWBKAbgCge6EwKInAwA5migBVJKky4CJZhwBcMKFgAOaEHXiz0VRaQDePGDEaS4jMPpSGFRYrwC+fYIQCGECDADChBAAzDBmFgDaEtIG8tRKHAC65DCsdIiM0KxuPEA

💻 Code

const uniqueSymbol0 = Symbol.for("");

function getUniqueSymbol0(): typeof uniqueSymbol0 {
  return uniqueSymbol0;
}

class Cls3 {
  [getUniqueSymbol0()] = "first"; // A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type.(1166)
}

🙁 Actual behavior

The error is confusing because this expression has a unique symbol type already

🙂 Expected behavior

This error should mention more accurate late-bindable requirements. From the source code:

    /**
     * Indicates whether a declaration name is definitely late-bindable.
     * A declaration name is only late-bindable if:
     * - It is a `ComputedPropertyName`.
     * - Its expression is an `Identifier` or either a `PropertyAccessExpression` an
     * `ElementAccessExpression` consisting only of these same three types of nodes.
     * - The type of its expression is a string or numeric literal type, or is a `unique symbol` type.
     */

Additional information about the issue

No response

贡献者指南