vue源码学习 --- flow学习

一. flow的作用

静态检测JavaScript类型,可以在编译阶段(说法不太准)识别出错误,规避运行时才显现的bug

二. 基本类型

// @flow

/**
 * JavaScript 基本类型在flow中使用
 */

/**
 * boolean
 * 如下例子中,只接受一个boolean的参数,一个到达acceptsBoolean函数不再需要转换为boolean的参数(因此不接受0,'str'等值)
 */
function acceptsBoolean(value: boolean) {
  // ...
}
acceptsBoolean(true);			// work
acceptsBoolean(false);		// work
// acceptsBoolean('foo');		// error
// acceptsBoolean(0);				// error
acceptsBoolean(Boolean(0)); // Works!
acceptsBoolean(!0);        // Works!
acceptsBoolean(!0);        // Works!

/**
 * number
 */
function acceptsNumber(value: number) {
  // ...
}
acceptsNumber(42);       // Works!
acceptsNumber(3.14);     // Works!
acceptsNumber(NaN);      // Works!
acceptsNumber(Infinity); // Works!
// acceptsNumber("123");    // Error!

/**
 * string
 * 同boolean中的js类型隐式转换,当到达acceptsString函数时,是字符串会被接受
 */
function acceptsString(value: string) {
  // ...
}
acceptsString("foo"); // Works!
// acceptsString(false); // Error!
acceptsString("foo" + 42); // Works!
// acceptsString("foo" + {}); // Error!

/**
 * null 和 void(void is undefined in javascript)
 */
function acceptsNull(value: null) {
  /* ... */
}
function acceptsUndefined(value: void) {
  /* ... */
}
acceptsNull(null);      		 // Works!
// acceptsNull(undefined);      // Error!
// acceptsNull(undefined);      		 // Error!
acceptsNull(null);      // Works!

/**
 * 可能是 null 和 void(undefined) 和 空值, (属性值前加?)
 */
function acceptsMaybeString(value: ?string) {
  // ...
}
acceptsMaybeString("bar");     // Works!
acceptsMaybeString(undefined); // Works!
acceptsMaybeString(null);      // Works!
acceptsMaybeString();          // Works!

/**
 * 对象属性前加?
 */
function acceptsObject(value: { foo?: string }) {
  // ...
}
acceptsObject({ foo: "bar" });     // Works!
acceptsObject({ foo: undefined }); // Works!
// acceptsObject({ foo: null });      // Error!
acceptsObject({});                 // Works!

function acceptsOptionalString(value?: string) {
  // ...
}
acceptsOptionalString("bar");     // Works!
acceptsOptionalString(undefined); // Works!
// acceptsOptionalString(null);      // Error!
acceptsOptionalString();          // Works!

/**
 * 默认值
 */
function acceptsOptionalString(value: string = "foo") {
  // ...
}
acceptsOptionalString("bar");     // Works!
acceptsOptionalString(undefined); // Works!
// acceptsOptionalString(null);      // Error!
acceptsOptionalString();          // Works!

/**
 * Symbol 不支持
 */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值