不知道现在回复是否支持 Markdown 了,如果不支持的话请看上面的 gist 。
这段代码应该来自
https://github.com/fbsamples/f8app/blob/master/js/common/F8StyleSheet.js`...` 是通过 [babel](
http://babeljs.io/) 转译的 Rest/Spread 。具体请看
https://github.com/sebmarkbage/ecmascript-rest-spread- `let {ios, android, ...style} = obj` 可以理解成 `let ios = obj.ios; let android = obj.android; let style = "obj 中除去 ios 和 android 之外的所有 property";`
- `let` 右侧的 `{...styles[name]}` 可以理解成 `Object.assign({}, styles[name]);`
- 同理,`style = {...style, ...android};` 会被 babel 转译成 `style = Object.assign({}, style, android);`
函数签名中的 `: Object` 以及 `: {[name: string]: number}` 是 [flow](
https://flowtype.org/) 的类型标注(并不是 TypeScript )。换句话说,`create` 这个函数接受一个类型为 `Object` 的参数 `styles`,并返回一个类型为 `{[name: string]: number}` 的值。
- 除去 `number`、`string`、`boolean`、`null` 以及 `undefined` 之外的任何类型均可被标注为 `Object`
-
https://flowtype.org/docs/objects.html#the-object-type- `{[name: string]: number}` 代表这是一个从 `string` 到 `number` 的映射。举个例子的话,这个函数返回 `{ a: 12, b: 13 }` 是没有问题的,但如果返回 `{ a: 12, b: 'foo' }` 则会报错,因为 `'foo'` 是一个 `string` 而不是 `number`
-
https://flowtype.org/docs/objects.html#objects-as-maps