Description
I encountered a regression with TypeScript >= 3 + React, generics and defaultProps
-
TypeScript versions: 3.1.0-dev.20180810 and 3.0.1, not with < 3
-
Search terms: React defaultProps generics
-
Code:
import React from 'react';
import ReactDOM from 'react-dom';
interface BaseProps {
when?: (value: string) => boolean;
}
interface Props extends BaseProps {
}
class FieldFeedback<P extends Props = BaseProps> extends React.Component<P> {
static defaultProps = {
when: () => true
};
render() {
return <div>Hello</div>;
}
}
// Error: Parameter 'value' implicitly has an 'any' type
const Test = () => <FieldFeedback when={value => console.log(value)} />;
ReactDOM.render(<Test />, document.getElementById('app'));
-
Expected behavior: No error
-
Actual behavior:
Parameter 'value' implicitly has an 'any' type
at linewhen={value => ...}
When removing defaultProps
, there is no error:
interface BaseProps {
when?: (value: string) => boolean;
}
interface Props extends BaseProps {
}
class FieldFeedback<P extends Props = BaseProps> extends React.Component<P> {
/*static defaultProps = {
when: () => true
};*/
render() {
return <div>Hello</div>;
}
}
// No error
const Test = () => <FieldFeedback when={value => console.log(value)} />;
Error vscode (using 3.1.0-dev.20180810) screenshot:
No error vscode (using 3.1.0-dev.20180810) screenshot:
Stumble upon this while upgrading this lib: https://github.com/tkrotoff/react-form-with-constraints to TypeScript 3.
I do not think this is related with @types/react. Using v16.4.9 (latest version) it fails with TypeScript >= 3 and works with TypeScript < 3: