Open
Description
@RyanCavanaugh @weswigham @ahejlsberg Caused by #27697
TypeScript Version: 3.4.0-dev.20190222
Search Terms:
Code
type Attrs = Record<string, string | EventListener | null | undefined>;
type Children =
| Children.Void
| Children.Text
| Children.Collection
| Children.Record;
namespace Children {
export type Void = undefined;
export type Text = string;
export interface Collection extends ReadonlyArray<El> { }
export type Record = { [field: string]: El; };
}
interface El<
T extends string = string,
E extends Element = Element,
C extends Children = Children,
> {
readonly tag?: T;
readonly element: E;
children: Relax<C>;
}
type Relax<C extends Children> = C extends Children.Text ? Children.Text : C;
declare function f<C extends Children>( children: C): C;
declare function f (attrs: Attrs, ): void;
declare function f<C extends Children>(attrs: Attrs, children: C): C;
f({ a: 0 as any as El<'a', HTMLAnchorElement> }); // ok
f({ a: 0 as any as El<'a', HTMLAnchorElement, Children> }); // ok
f({ a: 0 as any as El<'a', HTMLAnchorElement, Children.Void> }); // error since 3.4.0-dev.20190222
f({ a: 0 as any as El<'a', HTMLAnchorElement, Children.Text> }); // error since 3.4.0-dev.20190222
Expected behavior:
pass
Actual behavior:
error
Related Issues: