当前位置: 首页 > 知识库问答 >
问题:

扩展流“类型道具”以包括来自其他组件的道具类型?

秦鸿羽
2023-03-14

我有以下组件,它主要依赖于react native的Image

// @flow
import React from "react";
import { Image } from "react-native";
import { deviceWidth } from "../services/device";

type Props = {
  width: number,
  ratio: number
};

class RatioImage extends React.Component<Props> {
  render() {
    const { width, ratio, style, ...props } = this.props;
    return (
      <Image
        {...props}
        style={[
          {
            width: deviceWidth * (width / 100),
            height: deviceWidth * (width / 100) * ratio
          },
          style
        ]}
      />
    );
  }
}

export default RatioImage;

我能够输入注释我自己的道具,但在上面的例子中style抛出了一个错误

[flow]属性<代码>样式(在道具中找不到属性)常量样式:任意

我知道在typescript中,我可以将接口扩展到Image one,流程中是否有一些东西可以让我的道具以某种方式从Image继承所有类型?我如何从react native导入这些类型?

编辑我发现了一个叫做交叉点类型的概念,并尝试了这个

import { Image, type Image as ImageProps } from "react-native";
type Props = ImageProps & {
  width: number,
  ratio: number
};

但风格仍然抛出了一个错误,尽管是不同的错误

[flow]propertystyle(无法在交叉点类型的任何成员上访问属性交叉点成员1:ImageProps错误:在React组件成员中未找到属性style属性2:对象类型错误:在对象类型中未找到属性style属性)常量样式:任意

共有1个答案

姜志行
2023-03-14

不幸的是,React Native在使用流类型的方式上并非100%一致。

如果您试图对Text组件执行相同的操作,您可以简单地从全局Hati命名空间提供的内部TextProps模块导入类型定义,并使用Flow类型联合创建自己的超类型:

import type { TextProps } from 'TextProps';

type ExtendedTextProps = TextProps & {
  additionalProp: string
};

也就是说,没有用于导入的ImageProps模块。如果查看Image(iOS)组件类型,它们仍然表示为PropType。

此时,我相信,为自定义图像组件添加完整类型覆盖的最简单方法是查看图像组件的proptype并手动将其转换为流类型。一些更复杂的字段类型(如ImageSource和ImageStyle)已作为流类型存在。

我不确定核心团队的意图是什么,但可能值得考虑将type def贡献给React Native本身,并为未来用户解决这个问题。

 类似资料:
  • 我得到警告,因为警告:失败的道具类型:组件:道具类型是无效的;它必须是一个函数,通常来自包,但收到了 我的代码是: 我的功能运行正常,但出现此控制台错误是否有人可以帮助我解决此警告?

  • 假设我想做这么简单的事 在这里,什么样的道具适合儿童? 其中子级可以是由scrollView、TextInput、Text等组成的本地组件

  • 我有一个组件,根据其大小接收道具。道具可以是字符串或数字,例如:或。 我能让知道这可以是PropTypes验证中的一个或另一个吗? 如果未指定类型,则会收到警告: prop type无效;它必须是一个函数,通常来自React。道具类型。

  • 本文向大家介绍react-native 道具类型,包括了react-native 道具类型的使用技巧和注意事项,需要的朋友参考一下 示例 该prop-types包允许您向组件添加运行时类型检查,以确保传递给组件的道具类型正确。例如,如果不将aname或isYummyprop传递给下面的组件,它将在开发模式下引发错误。在生产模式下,不进行道具类型检查。定义propTypes可以使您的组件更具可读性和

  • 我在react native中引入了用于搜索的Texinput。代码如下: 和: 每当我在输入文本后运行Android时,我都会看到这个警告: 警告失败属性类型为TextInput提供的“object”类型的无效属性“value”,应为“string”

  • PropType对调试很有帮助,因为当期望未得到满足时,它们会显示警告。除此之外,它们还很好地表达了组件应该如何使用的意图。 如果我有一个组件,它接受一个可能是promise的值的prop,是否有某种方法可以使用PropType来表达?我想象的要么是像这样的直接的东西,要么是使用构建块PropType来表达“thable”概念的某种方式。 下面是一个高度简化的示例,展示了我的预期用例: