【问题标题】:How to set a default value for a Flow type?如何为流类型设置默认值?
【发布时间】:2017-02-06 03:34:21
【问题描述】:

我已经定义了一个自定义流类型

export type MyType = {
  code: number,
  type: number = 1,
}

如果不存在任何值,我希望 type 参数默认为 1。但是,Flow 向Unexpected token = 抱怨。

这可以用 Flow 完成吗?

目前正在使用 Flow v0.32.0

【问题讨论】:

  • 不可能。此外,混合和匹配类型和值是没有意义的。
  • 但是在注释函数时可以这样做,即function (code: number, type: number = 1) {}
  • = 1 部分处于值级别

标签: javascript flowtype


【解决方案1】:

类型声明中不能有默认值。

可能的想法

使用一个类并使用属性初始化器初始化任何默认值:https://basarat.gitbooks.io/typescript/content/docs/classes.html#property-initializer

【讨论】:

    【解决方案2】:

    遵循@basarat 提出的想法,并使用一个类。类既作为类型又作为值存在。

    值可以被初始化。 Flow 识别提议的属性初始化器语法,因此使用 Flow(用于类型)和 babel(用于提议的功能支持)您可以像 this 一样声明您的类:

    // @flow
    export class MyType {
      code: number;
      type: number = 1; 
    };
    

    流,以及它允许​​您定义的类型,在 javascript 运行时中不存在。这就是类型声明不支持值初始化器的原因。

    【讨论】:

      【解决方案3】:

      函数参数也可以有默认值。这是 ECMAScript 2015 的一个特性。

      function method(value: string = "default") { /* ... */ }
      

      除了设置类型之外,默认参数也可以是无效的或完全省略。但是,它们不能为空。

      // @flow
      function acceptsOptionalString(value: string = "foo") {
        // ...
      }
      
      acceptsOptionalString("bar");
      acceptsOptionalString(undefined);
      acceptsOptionalString(null);
      acceptsOptionalString();
      

      https://flow.org/en/docs/types/primitives/#toc-function-parameters-with-defaults

      【讨论】:

        【解决方案4】:

        如果为组件设置它,那么您可以设置一个默认值,如下所示:

        type Props = {
          code: number,
          type: number,
        }
        
        const Component = (props: Props) => (
          <div>{props.code}</div>
          <div>{props.type}</div>
        );
        
        // default values
        const defaultProps: Props = {
          code: '',
          type: 1,
        };
        
        Component.defaultProps = defaultProps;
        
        export default Component;
        

        【讨论】:

          猜你喜欢
          • 2022-12-05
          • 2021-12-24
          • 1970-01-01
          • 2020-07-24
          • 2019-10-26
          • 2010-12-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多