Skip to content

Regression with >= v3 and React, generics, defaultProps #26395

@tkrotoff

Description

@tkrotoff

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 line when={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:
fail


No error vscode (using 3.1.0-dev.20180810) screenshot:
success

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:

success-2 9 2

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScriptFixedA PR has been merged for this issue

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions