Flow type errors when building higher-order components using intersection types
- Dominant language
- Rust
- Stars
- 22.3k
- Forks
- 1.9k
- PR merge metrics
- No merged PRs in 30d
Description
Generic code: https://flow.org/try/#0PQKgBAAgZgNg9gdzCYAoVAXAngBwKZgDCcAtjnAHZ4UYAqueAPAAoB8YAvGABTc4BOcHAGcAXGGYBKTuwBucAJYATSQG5MDMAAkA8oUYAhdl0YBBdtwzjiZStToMzYAGRgj0juxvkqNevjNWdVQoAFcKAGMMBUowEjx+AHMmUwAaN1ZuAENxNLAAI3EDSVyXNzAAb1QwMH48DFD+CkqAOjas9LaW-IBfdR70MMjo2Ix+LIphKDh+EjN0o25Ct3SrIlIfe38UsvdrDbs-R3NK6tr6xubs3JKweWUZU5qajG54pLxs9PzJNTO+1ADELhKIxZoACzgEUMmWWxXEun0RieYAilGEGDACjIME4YECPDW3kODgCpl2rFuxN8pJSxnYVWeNTqDSaPAooRgMHEEywfyZYGAwBZlzAYwmUxmJCWq35YABAoFZxFbOxOBg-XQQA
Less generic code: https://flow.org/try/#0PQKgBAAgZgNg9gdzCYAoVAXAngBwKZgDCcAtjnAHZ4UYAqueAPAAoB8YAvGABTc4BOcHAGcAXGGYBKTuwBucAJYATSQG5MDMACEAcgEMSBLgG8KBvOOEZ+CigHMAvuuz4wACQDyhTmEYBBdm4McWIySmo6Bn8wADJtfUNWaQ52UPIqGnp8f1Z1VCgAVwoAYwwFSjBDfjs8BKY-ABp481ZuPXFGsAAjcV1zSQ7Y5sMwY1QwMH48DAL+ClGAOiW9JqWFrqdUB3RCkrKK6z0KYSg4fhI6nO4e4bwm4KJSdIis+qG+xIHHsIzI7IDRuNJtNZvM2h0vvJlDJARMJhhuFUanU2k0upI1EDNtt8kVSuV5gALODFFE3D54L6ebxjCbFShWMAKMgwHw5HgPNLhTJRPzvOpJEJPbl-ersFKwuHAmZzHgUAowGDiI5YTFSsDAYBTGXzQ7HU7nMn3NVgTbq9VA7Wgpks9TbIA
Pasting less generic code inline
```
/* @flow */
type ComponentType
= ((props: P) => void);
type BName = {name: string};
type HOC = (t: ComponentType) => ComponentType;
function mergeName(a: A, b: BName): A & BName {
return {...a, ...b};
}
function transformName(b: BName, t: ComponentType): ComponentType {
return (a: A): void => {
t(mergeName(a, b));
};
}
function hocName(b: BName): HOC {
const impl = (t: ComponentType): ComponentType => {
return (null: any);
//return transformName(b, t);
};
return impl;
}
```
Typechecker literally prints the same type twice and complains that it is incompatible
```
This parameter is incompatible:
5: type HOC = (t: ComponentType) => ComponentType;
^ ComponentType. Has some incompatible type argument with
18: const impl = (t: ComponentType): ComponentType => {
^ ComponentType
```
Contributor guide
Assessment
This issue has not been assessed yet.