创建具有react-native init AwesomeProject
新鲜阵营本地项目,我被<{}>
在这个类中声明困惑,产生App.js:流型注释:为什么`ClassName <{}>`?
export default class App extends Component<{}> {
后来我想通了,<{}>
是一个Class Generic流类型注释。
我熟悉generic types in Java并了解它们的用处。
但是,我正在努力理解Flow注释的目的。它完成了什么?据我所知,这是验证App
类将是Object
类型。虽然这似乎是多余的,如果是这样的话,那么我希望它会被写成<Object>
在本react-native source在:
class AnimatedComponent extends React.Component<Object> {
唯一的原因,我能找到解释需要这种类型的检查是在MDN documentation for extends
:
扩展的.prototype必须是Object或null。
是<{}>
<Object>
的简写?如果是这样的话,那么它似乎可以用一个实际的字符串替代指定string
的类型注释,这看起来是错误的。例如:
// @flow
function concat(a: string, b: string) {
return a + b;
}
// as compared to -->
// @flow
function concat(a: "foo", b: "bar") {
return a + b;
}
- 什么是
<{}>
注释的目的或者是什么呢验证有关的代码? - 是
<{}>
相当于<Object>
? - 我误解了什么吗?
谢谢!
关于2:NO,因为'{}'注释定义了一个密封的对象类型,而'Object'是未封闭的 – ftor