如何设置Flow类型的默认值?

时间:2016-09-28 09:01:54

标签: javascript flowtype

我已定义了自定义流类型

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

如果没有值,我希望type参数默认为1。但是,Flow抱怨Unexpected token =

Flow error

可以用Flow完成吗?

目前正在使用Flow v0.32.0

4 个答案:

答案 0 :(得分:7)

功能参数也可以有默认值。这是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

答案 1 :(得分:6)

按照@basarat建议的想法,并使用一个类。类作为类型和值存在。

可以初始化该值。 Flow识别建议的属性初始化器语法,因此使用Flow(对于类型)和babel(对于建议的功能支持),您可以将类声明为this

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

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

答案 2 :(得分:3)

您不能在类型声明中使用默认值。

可能的想法

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

答案 3 :(得分:0)

如果将其设置为组件,则可以这样设置默认值:

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;