flow中问号在参数后面和在冒号有什么区别?declare type的作用是?看英文文档有点一知半解

// vue源码片段
declare type ASTElementHandler = {
  value: string;
  params?: Array<any>;
  modifiers: ?ASTModifiers;// 这个好像是接收指定类型,undefined,null
};

vue源码出处

阅读 6.5k
2 个回答
  1. params?: Array<any>; 问号在前,则类型可以是 数组 、void ,但不能是null
  2. params:? Array<any>; 问号在后,类型可以是 数组 、void,也可以是 null
  3. ASTModifiers是用户在flow文件中自定义的结构类型,根据项目需求来自行指定

4.declare type的作用 是因为:js本身是弱类型语言,需要在运行的时候才能判定类型是否有问题或者进行一些操作,效率低。
提前申明类型之后,一方面便于合作,更规范。另一方面可以在编译阶段就能检测出语法错误。节省了运行时间。

我再补充一点:
可选类型(Maybe Types)
可选类型是用于值可选的地方,用法就是在类型前加一个?,例如?string或?number。可选类型可以是null或void。

// @flow
function acceptsMaybeString(value: ?string) {
  // ...
}

acceptsMaybeString("bar");     // Works!
acceptsMaybeString(undefined); // Works!
acceptsMaybeString(null);      // Works!
acceptsMaybeString();          // Works!
可选对象属性
对象拥有可选属性的用法就是在属性后加一个?,可选对象属性可以void或省略,但不能是null。如:

// @flow
function acceptsObject(value: { foo?: string }) {
  // ...
}

acceptsObject({ foo: "bar" });     // Works!
acceptsObject({ foo: undefined }); // Works!
acceptsObject({ foo: null });      // Error!
acceptsObject({});                 // Works!

可选函数参数
函数拥有可选参数的用法是在参数后加一个?,可选参数可以void或省略,但不能是null。如:

// @flow
function acceptsOptionalString(value?: string) {
  // ...
}

acceptsOptionalString("bar");     // Works!
acceptsOptionalString(undefined); // Works!
acceptsOptionalString(null);      // Error!
acceptsOptionalString();          // Works!
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题