Javascript 如何使流确信值符合泛型类型?

Javascript 如何使流确信值符合泛型类型?,javascript,types,flowtype,Javascript,Types,Flowtype,我有以下流类型代码: /* @flow */ type Foo = 1; const DefaultFoo: Foo = 1; function getDefault<T: Foo>(): T { return DefaultFoo; } /*@flow*/ Foo型=1; constdefaultfoo:Foo=1; 函数getDefault():T{ 返回DefaultFoo; } 当我尝试运行它时,我得到以下错误: 8: return DefaultFoo;

我有以下流类型代码:

/* @flow */

type Foo = 1;

const DefaultFoo: Foo = 1;

function getDefault<T: Foo>(): T {
  return DefaultFoo;
}
/*@flow*/
Foo型=1;
constdefaultfoo:Foo=1;
函数getDefault():T{
返回DefaultFoo;
}
当我尝试运行它时,我得到以下错误:

8:   return DefaultFoo;
            ^ number literal `1`. This type is incompatible with the expected return type of
7: function getDefault<T: Foo>(): T {
                                  ^ T
8:返回DefaultFoo;
^数字文字“1”。此类型与的预期返回类型不兼容
7:函数getDefault():T{
^T
这里有一个flow.org/try链接:


有人能解释一下代码有什么问题吗?我如何才能说服Flow相信
DefaultFoo
确实是
T
类型的?

假设
DefaultFoo
T
类型的错误
看看这个例子(
Bar
是本例中的
T
):

Bar
扩展了
Foo
,因此
Bar
Foo
,而不是相反。
DefaultFoo
不是
a
Bar

type Foo = {};

interface Bar extends Foo {
  bar(): void;
}

const DefaultFoo: Foo = {};