1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
// @jsx: preserve
// @noImplicitAny: true
// @filename: index.tsx
interface Elements {
foo: { callback?: (value: number) => void };
bar: { callback?: (value: string) => void };
}
type Props<C extends keyof Elements> = { as?: C } & Elements[C];
declare function Test<C extends keyof Elements>(props: Props<C>): null;
<Test
as="bar"
callback={(value) => {}}
/>;
Test({
as: "bar",
callback: (value) => {},
});
<Test<'bar'>
as="bar"
callback={(value) => {}}
/>;
|