镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

Misleading error elaboration #25971

Closed
Closed

Description

TypeScript Version: 3.1.0-dev

Search Terms: Error elaboration

Code

function foo<T extends { a: string }>(x: T) {
    x = { a: "abc", b: 20, c: 30 };
}

Expected behavior: An error stating { a: string, b: number, c: number } is not assignable to T.

Actual behavior: Elaboration errors on the b and c property assignments which misleads the user to think the issue is with those properties. The real issue is that no object literal and only a T is assignable to T, and we should not attempt to elaborate here. Generally, the elaboration logic can't rely on the behavior of getIndexedAccess without first validating that a meaningful type is being requested because getIndexedAccess will happily create deferred indexed access types that technically are errors. The elaboration logic needs to be more selective about which target types it descends into. Specifically, I would suggest only descending into non-generic object types and non-generic intersection types.

Activity

  1. ahejlsberg commented on Jul 26, 2018

    @ahejlsberg
    MemberAuthor

    Additionally, since I didn't get to review #25140, please remove the generator functions and just use normal recursive descent. There's no need for generators here and it is inconsistent with what we do elsewhere (such as the conceptually similar logic to relate types and compute contextual types).

  2. locked as resolved and limited conversation to collaborators on Oct 21, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

BugA bug in TypeScriptDomain: Error MessagesThe issue relates to error messagingFixedA PR has been merged for this issue

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions