这个函数里的... 是什么东西,这么神奇,还有函数声明后面的{}。

2016-05-05 11:22:21 +08:00
 vonnyfly
export function create(styles: Object): {[name: string]: number} {
  const platformStyles = {};
  Object.keys(styles).forEach((name) => {
    let {ios, android, ...style} = {...styles[name]};
    if (ios && Platform.OS === 'ios') {
      style = {...style, ...ios};
    }
    if (android && Platform.OS === 'android') {
      style = {...style, ...android};
    }
    platformStyles[name] = style;
  });
  return StyleSheet.create(platformStyles);
}
4277 次点击
所在节点    JavaScript
25 条回复
ayaseangle
2016-05-05 11:28:48 +08:00
annotation ?
koi
2016-05-05 11:30:45 +08:00
这是 react native 里面的代码吧? react native 貌似用的不是原生的 js 而是 flow.js? 类似 typescript 之类的
plantain
2016-05-05 11:44:36 +08:00
第一个是 es6 的 rest parameter ,第二个是一个类型,函数返回值的类型。
plantain
2016-05-05 11:47:11 +08:00
那个类型里定义了一个 es6 的 computed property
rogerchen
2016-05-05 11:51:47 +08:00
...是 destructuring
函数声明后边那个{}是返回值类型声明
这段代码就是 typescript
iugo
2016-05-05 12:20:48 +08:00
@plantain 这段代码中的用法应被称作 spread 而不是 rest. 是展开而不是集合.

而且这是还未定型的 ES7 的特性.
broadliyn
2016-05-05 12:39:54 +08:00
醉了,越来越搞不懂 js 要干嘛了。。。。
adspe
2016-05-05 12:44:55 +08:00
@rogerchen 看到有类型指定就是 TS 了呀。 ES6 的 destructuring 和 spread 一起很好用
visonme
2016-05-05 12:45:52 +08:00
@broadliyn 不是 js 要干嘛,是那些公司,团体,个人相对 js 干点啥~ 呵呵~
am241
2016-05-05 12:48:09 +08:00
js 算不算常见语言里语法最奇怪的?感觉已经远超 perl 了
learnshare
2016-05-05 12:58:16 +08:00
TypeScript 吧,不过语法还是 ES6/2015/***
secondwtq
2016-05-05 13:51:11 +08:00
@am241 JS 语法感觉还行,但是有一些奇怪的机制。
vonnyfly
2016-05-05 14:03:26 +08:00
@ayaseangle
@koi
@plantain
@rogerchen
@iugo
@adspe
的确是 TypeScript,刚刚看了下语法,发现 JS 的写法越来越逆天了。
这里有 RN javascript 的特殊语法,大概能看懂,自己写有点难: https://facebook.github.io/react-native/docs/javascript-environment.html#javascript-syntax-transformers
vonnyfly
2016-05-05 14:05:53 +08:00
三个点叫做 object spread syntax 。
haozhang
2016-05-05 14:09:22 +08:00
@iugo spread 是 ES6 的吧,怎么会是 ES7 的呢
fds
2016-05-05 14:12:54 +08:00
其实就是为了写起来方便,简化字典操作。
Phariel
2016-05-05 14:16:23 +08:00
js 有赶超 ruby 的趋势
vonnyfly
2016-05-05 14:20:20 +08:00
@haozhang object spread 是 ES7 , Array/call spread 是 ES6 ,应该是这样的。
vonnyfly
2016-05-05 14:21:28 +08:00
@Phariel 在语法上跟 Ruby 元编程技巧有的一拼了。
xjp
2016-05-05 21:05:08 +08:00
typeScript js 的一个超集 现在非常流行

上面这些语法什么的 js 暂时还不支持 之后会支持的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/276448

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX