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;
    }