Skip to content

Contextual property type from a mapped type fails to be provided in JSXΒ #55150

@Andarist

Description

@Andarist

Bug Report

πŸ”Ž Search Terms

contextual type property mapped type inference jsx

πŸ•— Version & Regression Information

  • This is the behavior in every version I tried

⏯ Playground Link

Playground link with relevant code

πŸ’» Code

import React, { ComponentPropsWithRef, ElementType } from "react";

function UnwrappedLink<T extends ElementType = ElementType>(
  props: Omit<ComponentPropsWithRef<ElementType extends T ? "a" : T>, "as">
) {
  return <a></a>;
}

UnwrappedLink({
  onClick: (e) => {
    //      ^? (parameter) e: React.MouseEvent<HTMLAnchorElement, MouseEvent>
  },
});

<UnwrappedLink
  onClick={(e) => {
    //      ^? (parameter) e: any
  }}
/>;

πŸ™ Actual behavior

Contextual signature for onClick fails to be computed here when using JSX but it works just fine with a regular function call.

The problem here is that the contextual type of JSX attributes is an intersection as it includes IntrinsicAttributes. Because of that getTypeOfPropertyOfContextualType fails to call substituteIndexedMappedType appropriately - this is something that is being already fixed by #52095

πŸ™‚ Expected behavior

Since JSX is roughly meant to be a sugar for function calls both of those should behave the same way.

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugA bug in TypeScriptFix AvailableA PR has been opened for this issueHelp WantedYou can do this

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions