Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Type inference fails for generic React props with JSX syntax, works with regular syntax #16499

Closed
alshain opened this issue Jun 13, 2017 · 2 comments
Labels
Duplicate An existing issue was already created

Comments

@alshain
Copy link

alshain commented Jun 13, 2017

TypeScript Version: 2.3.4

Code

With the react TS starter pack: create-react-app.cmd generics-fail --scripts-version=react-scripts-ts, modify index.tsx as follows:

import * as React from 'react';
import * as ReactDOM from 'react-dom';
import registerServiceWorker from './registerServiceWorker';
import './index.css';

interface Problematic<T> {
    key: T;
}

interface Props<T, R> {
    data: T;
    renderer: (props: Problematic<T>) => React.ReactElement<R>;
}

class InferenceFail<T, R> extends React.Component<Props<T, R>, {}> {

}

class Data {
  key: string;
}

let works = new InferenceFail({data: new Data(), renderer: ({key}) => <div>{key.key}</div>});

let fails = <InferenceFail data={new Data()} renderer={({key}) => <div>{key.key}</div>} />;
//                                                                          ^^^

ReactDOM.render(
  (
    <div>
    {works}
    {fails}
  </div>),
  document.getElementById('root') as HTMLElement
);
registerServiceWorker();

Expected behavior:

No compiler error. The InferenceFail instance should be correctly inferred to have actual type parameter Data for T.

Actual behavior:

Compiler error:

(25,77): error TS2339: Property 'key' does not exist on type '{}'.

T is inferred to be {}.

@mhegazy
Copy link
Contributor

mhegazy commented Jun 13, 2017

duplicate of #14729

@mhegazy mhegazy added the Duplicate An existing issue was already created label Jun 13, 2017
@mhegazy
Copy link
Contributor

mhegazy commented Aug 17, 2017

Automatically closing this issue for housekeeping purposes. The issue labels indicate that it is unactionable at the moment or has already been addressed.

@mhegazy mhegazy closed this as completed Aug 17, 2017
@microsoft microsoft locked and limited conversation to collaborators Jun 14, 2018
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Duplicate An existing issue was already created
Projects
None yet
Development

No branches or pull requests

2 participants