javascript - Egenskapen 'defaultProps' finns inte på typen


Jag har en Typescript React-klasskomponent som följer:

import React, { Component } from 'react';

interface Props {
  bar?: boolean;
}

const defaultProps: Partial<Props> = {
  bar: false,
};

class Foo extends Component<Props> {
  render() {
    ...
  }
}

Foo.defaultProps = defaultProps;

export default Foo;

Här får jag följande typfel:

Property 'defaultProps' does not exist on type 'typeof Foo'.

Jag ser 2 lösningar för att lösa detta. En är att deklarera typen på klassen på följande sätt:

class Foo extends Component<Props> {
  static defaultProps: Partial<Props>;

  render() {
    ...
  }
}

Det andra är att deklarera defaultProps helt inne i klassen på det här sättet:

class Foo extends Component<Props> {
  static defaultProps: Partial<Props> = {
    bar: false,
  };

  render() {
    ...
  }
}

Jag använder eslint-config-airbnb 18.0.1 och eslint 6.1.0 så båda dessa lösningar ger detta eslint-fel:

'defaultProps' should be declared outside the class body (react/static-property-placement)

Finns det ett sätt att deklarera defaultProps utanför klassen utan att orsaka ett typfel?

Svar #1

TS-dokument säger att statiska defaultProps är vägen att gå.

Verkar konstigt att lägga till eslint ovanpå TS, jag tror att airbnb-konfigurationen är för JavaScript, inte TypeScript.

Svar #2

din lösning 2 är det bästa sättet att hantera det fallet:

class Foo extends Component<Props> {
  static defaultProps: Partial<Props>;

  render() {
    ...
  }
}

Om du har möjlighet, skulle det bästa och renaste enligt min åsikt vara att refaktorera din komponent till funktionell stil:

function Foo({ 
  var1 = 'defaultValue, 
  var2 = 'default2 
}: Props) {
  return <View>...</View>
}

Relaterade artiklar