鍍金池/ 問(wèn)答/Python  Linux  網(wǎng)絡(luò)安全  HTML/ flow中問(wèn)號(hào)在參數(shù)后面和在冒號(hào)有什么區(qū)別?declare type的作用是?看

flow中問(wèn)號(hào)在參數(shù)后面和在冒號(hào)有什么區(qū)別?declare type的作用是?看英文文檔有點(diǎn)一知半解

// vue源碼片段
declare type ASTElementHandler = {
  value: string;
  params?: Array<any>;
  modifiers: ?ASTModifiers;// 這個(gè)好像是接收指定類(lèi)型,undefined,null
};

vue源碼出處

回答
編輯回答
葬愛(ài)
  1. params?: Array<any>; 問(wèn)號(hào)在前,則類(lèi)型可以是 數(shù)組 、void ,但不能是null
  2. params:? Array<any>; 問(wèn)號(hào)在后,類(lèi)型可以是 數(shù)組 、void,也可以是 null
  3. ASTModifiers是用戶(hù)在flow文件中自定義的結(jié)構(gòu)類(lèi)型,根據(jù)項(xiàng)目需求來(lái)自行指定

4.declare type的作用 是因?yàn)椋簀s本身是弱類(lèi)型語(yǔ)言,需要在運(yùn)行的時(shí)候才能判定類(lèi)型是否有問(wèn)題或者進(jìn)行一些操作,效率低。
提前申明類(lèi)型之后,一方面便于合作,更規(guī)范。另一方面可以在編譯階段就能檢測(cè)出語(yǔ)法錯(cuò)誤。節(jié)省了運(yùn)行時(shí)間。

2017年4月9日 07:27
編輯回答
不歸路

我再補(bǔ)充一點(diǎn):
可選類(lèi)型(Maybe Types)
可選類(lèi)型是用于值可選的地方,用法就是在類(lèi)型前加一個(gè)?,例如?string或?number。可選類(lèi)型可以是null或void。

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

acceptsMaybeString("bar");     // Works!
acceptsMaybeString(undefined); // Works!
acceptsMaybeString(null);      // Works!
acceptsMaybeString();          // Works!
可選對(duì)象屬性
對(duì)象擁有可選屬性的用法就是在屬性后加一個(gè)?,可選對(duì)象屬性可以void或省略,但不能是null。如:

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

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

可選函數(shù)參數(shù)
函數(shù)擁有可選參數(shù)的用法是在參數(shù)后加一個(gè)?,可選參數(shù)可以void或省略,但不能是null。如:

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

acceptsOptionalString("bar");     // Works!
acceptsOptionalString(undefined); // Works!
acceptsOptionalString(null);      // Error!
acceptsOptionalString();          // Works!
2018年6月20日 05:16