-
Notifications
You must be signed in to change notification settings - Fork 13.2k
Closed
Labels
DuplicateAn existing issue was already createdAn existing issue was already created
Description
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 {}.
Metadata
Metadata
Assignees
Labels
DuplicateAn existing issue was already createdAn existing issue was already created