【问题标题】:Avoid possibly undefined value避免可能未定义的值
【发布时间】:2017-08-16 06:58:12
【问题描述】:

在流程中我有很多可选参数,像这样:

type Props = {
   assets?: string[]
}

我只有在确定它们不是未定义时才访问它们,但是 Flow 不断警告“无法访问可能未定义的值的属性”。

但是我知道它是肯定定义的,因为我只在定义时调用此方法。比如这样:

类 MyComponent 扩展 React.Component { 过滤器资产(){ 返回 this.props.assets.filter(....); } 使成为() { 返回 this.props.assets ?过滤器资产():空 } }

看到我已经有一个 if 语句。有没有办法避免这个警告,而不添加真正的javascript逻辑来隐藏这个警告?

通过真正的 js 逻辑,我的意思是我想避免的方法:

filterAssets() { 如果(!this.props.assets)返回; // 添加这一行 返回 this.props.assets.filter(....); }

【问题讨论】:

    标签: flowtype flow-typed


    【解决方案1】:

    您必须在filterAssets 内进行优化。否则,该函数可能会不安全地从应用程序的其他位置调用。

    class MyComponent extends React.Component { 
      props: {
        assets?: string[]
      }
    
      filterAssets() { 
        return this.props.assets 
          ? this.props.assets.filter(....) : null; 
      } 
    
      render() { 
        return this.filterAssets();
      } 
    }
    

    或者,您可以重构 filterAssets 以获取明确类型的 assets 属性:

    class MyComponent extends React.Component { 
      props: {
        assets?: string[]
      }
    
      filterAssets(assets: string[]) { return assets.filter(....); } 
    
      render() { 
        const assets = this.props.assets;
        return assets ? this.filterAssets(assets) : null 
      } 
    }
    

    【讨论】:

    • 哦,“不安全地从其他地方调用”这是一个好点。我也喜欢你绝对输入的想法。感谢您提供两种解决方案!
    • 乐于助人! :)
    • 是否有任何其他方式表明资产已明确输入?
    • 您可以使用%checks 添加细化函数。见github.com/facebook/flow/issues/4390
    • 哇,看起来很有趣!一个隐藏的未记录功能,感谢您的大力帮助!
    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 2022-08-13
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    相关资源
    最近更新 更多