【发布时间】:2019-09-17 19:39:35
【问题描述】:
我正在定义一个函数,它返回一个对象,该对象的成员是具有相同有效负载的函数。 Payload 类型是通过generic 定义的,它扩展了对象。但是,流程抱怨泛型类型不同然后通过:
export const getObj = <T: {}>(url: string) => ({
create: (entity: T) => console.log(url, entity),
...
});
const url = '/some-path';
type TEntity = {
some: string,
};
const entity: TEntity = {
some: 'value',
};
const instance = getObj<TEntity>(url);
instance.create(entity);
流量抱怨:
^ 无法在
entity绑定到entity时调用instance.create,因为TEntity2 与T2 不兼容。
Try.
我做错了什么?
【问题讨论】:
-
那你为什么不把create设置成Tentity呢?
create: (entity: TEntity) -
起初,b/c 我也需要
getObj<TOtherEntity>和getObj<TVeryOtherEntity>的方式(以及许多其他方式)。第二个是 b/c 除了create,还有其他方法需要相同的类型才能正确定义。他们按照您的建议,这将是大量的复制粘贴。 @基思 -
我还没有一个完整的答案,但是我通过用
T声明getObj的返回类型而不是用T内联注释来让Flow 运行。现在是Try Flow,但我希望尽快找到真正的答案。 -
@user11307804,是的,我觉得定义返回类型可能是一个可以接受的解决方法。奇怪的是流量自己算不出来……
标签: javascript types flowtype