Javascript 流类型注释:为什么`ClassName<;{}>;`?
使用Javascript 流类型注释:为什么`ClassName<;{}>;`?,javascript,generics,react-native,flowtype,Javascript,Generics,React Native,Flowtype,使用React Native init AwesomeProject创建一个新的React Native项目,我被生成的App.js中的类声明中的弄糊涂了: export default class App extends Component<{}> { 我能找到的解释此类型检查必要性的唯一原因是: 扩展的.prototype必须是对象或null 是的缩写吗?如果是这种情况,那么它似乎与使用实际字符串代替指定string的类型注释相当,这似乎是错误的。例如: // @flow fu
React Native init AwesomeProject
创建一个新的React Native项目,我被生成的App.js中的类声明中的
弄糊涂了:
export default class App extends Component<{}> {
我能找到的解释此类型检查必要性的唯一原因是:
扩展的.prototype必须是对象或null
是
的缩写吗?如果是这种情况,那么它似乎与使用实际字符串代替指定string
的类型注释相当,这似乎是错误的。例如:
// @flow
function concat(a: string, b: string) {
return a + b;
}
// as compared to -->
// @flow
function concat(a: "foo", b: "bar") {
return a + b;
}
注释的目的是什么,或者验证代码的目的是什么
是否等同于
{…}
类型的所有属性和类型的对象都是该类型的子类型。在{}
的情况下,这包括所有真对象(因此禁止数组和文本),实际上也包括对象==={}
您的示例与string
完全不同,因为像a:“foo”
这样的文本类型只是字符串的实例,即“fo”
不是“foo”
的子类型
至于泛型的实际用途,
组件
由流类型检查器进行特殊处理,事实上,您可以完全忽略泛型,因为它们可以从属性类型推断出来。第一个泛型参数是props的类型,第二个是state的类型 关于2:否,因为{}
注释定义了一个密封的对象类型,而对象
是未密封的
// @flow
function concat(a: string, b: string) {
return a + b;
}
// as compared to -->
// @flow
function concat(a: "foo", b: "bar") {
return a + b;
}