javascript 类型上不存在属性“defaultProps”

xnifntxz  于 2023-06-04  发布在  Java
关注(0)|答案(2)|浏览(134)

我有一个像这样的Typescript React类组件:

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;

这里我得到以下类型错误:

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

我看到两个解决方案来解决这个问题。一种是在类上声明类型,如下所示:

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

  render() {
    ...
  }
}

另一种是在类中声明defaultProps,完全像这样:

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

  render() {
    ...
  }
}

我使用的是eslint-config-airbnb 18.0.1和eslint 6.1.0,所以这两个解决方案都会抛出这个eslint错误:
'defaultProps' should be declared outside the class body (react/static-property-placement)
有没有一种方法可以在类外声明defaultProps而不会抛出类型错误?

pbwdgjma

pbwdgjma1#

TS文档说静态defaultProps是要走的路。
在TS之上添加eslint似乎很奇怪,我相信airbnb的配置是针对javascript的,而不是TypeScript。

46qrfjad

46qrfjad2#

解决方案2是处理这种情况的最佳方法:

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

  render() {
    ...
  }
}

如果你有机会,最好的和更干净的IMO将是重构你的组件到功能风格:

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

相关问题